夏青虫

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

CMakeList.txt for ifort with netcdf and mpi

./CMakeLists.txt:

cmake_minimum_required (VERSION 2.6)
project (inversion Fortran)
set(CMAKE_Fortran_COMPILER "mpif90")
set(CMAKE_AR xiar) # for -ipo
set(CMAKE_LINKER xild) # for -ipo
message(STATUS "xiar: " ${CMAKE_AR})
message(STATUS "xild: " ${CMAKE_LINKER})

set(CMAKE_LIBRARY_PATH ~/.soft/netcdf4/main/lib)
set(CMAKE_INCLUDE_PATH ~/.soft/netcdf4/main/include)
find_path(NETCDF_INCLUDE_DIR netcdf.mod
  DOC "NetCDF include directory (must contain netcdf.mod)"
)
if(NETCDF_INCLUDE_DIR)
  MESSAGE(STATUS "NETCDF module found in " ${NETCDF_INCLUDE_DIR})
else()
  MESSAGE(STATUS "WARNING: No NETCDF bindings are found.")
endif()

find_library(NETCDF_FORTRAN_LIB  netcdff
  DOC "NetCDF Fortran library"
)
if(NETCDF_FORTRAN_LIB)
  set(NETCDF_LIBS ${NETCDF_LIBS} ${NETCDF_FORTRAN_LIB})
  MESSAGE(STATUS "NETCDF Fortran library: " ${NETCDF_FORTRAN_LIB})
else()
  MESSAGE(STATUS "WARNING: No Fortran NETCDF bindings are found. This is not always fatal.")
endif()
find_package(MPI REQUIRED)
message(STATUS "MPI Fortran: " ${MPI_Fortran_FOUND})
message(STATUS "MPI Fortran include: " ${MPI_Fortran_INCLUDE_PATH})
message(STATUS "MPI Fortran compile: " ${MPI_Fortran_COMPILER})
message(STATUS "MPI Fortran library: " ${MPI_Fortran_LIBRARIES})
message(STATUS "MPI Fortran LINK: " ${MPI_Fortran_LINK_FLAGS})
message(STATUS "MPI Fortran COMPILE_FLAGS: " ${MPI_Fortran_COMPILE_FLAGS})
add_subdirectory (src bin)
./src/CMakeLists.txt:
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
include_directories(${NETCDF_INCLUDE_DIR} ${MPI_Fortran_INCLUDE_PATH})
add_definitions(-DPSV -DSTATIC -DCondFreeTIMG -DCondFreeVLOW)
set(CMAKE_Fortran_FLAGS "-ipo -warn all -fpp -axSSE3 -O3 -ftz -align records -mp1" )
add_library(mod mod_constants.F90 mod_math.F90 mod_string.F90
  mod_nfseis.F90 mod_para.F90 mod_mpi.F90 mod_media.F90 mod_grid.F90
  mod_macdrp.F90 mod_macdrp_backward.F90 mod_save.F90 mod_io.F90
  mod_aw.F90 mod_abs_exp.F90 mod_src.F90 mod_misf.F90 mod_forward.F90)

set(PROGRAMS seis2d_grid seis2d_metric seis2d_media seis2d_source
seis2d_station inversion)
#set(PROGRAMS seis2d_grid)
set(CORELIBS mod ${NETCDF_FORTRAN_LIB} ${MPI_Fortran_LIBRARIES})
message(STATUS "CORE----------" ${CORELIBS})
foreach(program ${PROGRAMS})
  add_executable(${program} ${program}.F90)
  target_link_libraries(${program} ${CORELIBS})
  set_target_properties(${program} PROPERTIES COMPILE_FLAGS
    "${CMAKE_Fortran_FLAGS}")
endforeach(program)

 

 
posted on 2013-01-21 10:42  夏青虫  阅读(916)  评论(0)    收藏  举报