cmake代码片段
构建
cmake -S ./src.dir -B ./build.dir -DSOME_DEFINITION="something"
cmake --build ./build.dir
cmake --build ./build.dir --target clean
#相当于make VERBOSE=1
cmake --build ./build.dir -- VERBOSE=1
#相当于ninja -v
cmake --build build -- -v
Printing messages
message(STATUS "I am here")
message(FATAL_ERROR "fatal error")
#打印cmake变量
include(CMakePrintHelpers)
cmake_print_variables(CMAKE_CXX_COMPILER_ID CMAKE_CXX_COMPILER_VERSION)
命令行指定编译器
env FC=gfortran CC=gcc CXX=g++ cmake -S . -B build.dir
#另一种方式
cmake -S . --build build.dir -DCMAKE_Fortran_COMPILER=gfortran -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++
cmake变量
cmake --help-variable-list
cmake --help-variable PROJECT_BINARY_DIR
cmake 命令
cmake --help-command-list
cmake --help-command add_custom_command
cmake模块
cmake --help-module-list
cmake --help-module FindMPI
cmake编译类型(Debug,Release,RelWithDebInfo,MinSizeRel)
cmake -S . --build build.dir -DCMAKE_BUILD_TYPE=Debug
不同编译选项,不同编译器测试
if(CMAKE_Fortran_COMPILER_ID MATCHES Intel)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Wall")
set(CMAKE_Fortran_FLAGS_DEBUG "-g -traceback")
set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -ip -xHOST")
endif()
if(CMAKE_Fortran_COMPILER_ID MATCHES GNU)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Wall")
set(CMAKE_Fortran_FLAGS_DEBUG "-O0 -g3")
set(CMAKE_Fortran_FLAGS_RELEASE "-Ofast -march=native")
endif()
MPI
project (hello_cmake LANGUAGES C CXX Fortran)
find_package(MPI REQUIRED)
if(MPI_Fortran_HAVE_F08_MODULE)
message(STATUS "use mpif08")
add_definitions(-DUSE_MPIF08_MODULE)
elseif(MPI_Fortran_HAVE_F90_MODULE)
message(STATUS "use mpi")
add_definitions(-DUSE_MPI_MODULE)
elseif(MPI_Fortran_HAVE_F77_HEADER)
add_definitions(-DUSE_MPI_F77)
else()
message(FATAL_ERROR "noFound MPI module")
endif()