CMake: 代码snippets片段

发布于:2024-07-22 ⋅ 阅读:(152) ⋅ 点赞:(0)

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()


资料

CMake introduction and hands-on workshop


网站公告

今日签到

点亮在社区的每一天
去签到