CMakeLists.txt使用的一些记录

CMakeLists常用命令

CMAKE_MINIMUM_REQUIRED(VERSION ...)
project(ProjectName)
configure_file(...)
include(...)
add_subdirectory(...)
set(...)
find_package(...)
include_directories(...)
link_directories(...)
link_libraries(...)
add_library(myLib ...)
set_property(TARGET ... PROPERTY ...)
aux_source_directory(...)
target_link_libraries(...)
add_executable(...)
add_dependencies(...)

用法自查,官方文档,或者网上也有很多翻译。

一般来说,项目用到以上命令就足够了(大概)。
下面记录几个遇到的情况。

单独设置某个项目的编译参数等

例如有个动态库为 LIB1,需要单独设置这个库的编译选项:(其实我也不确定,应该设置后就是单独的?)

add_libraries(LIB1 SHARED ${src_lib1})
set_property(TARGET LIB1 PROPERTY POSITION_INDEPENDENT_CODE ON)         #代表-fPIC
set_property(TARGET LIB1 PROPERTY COMPILE_FLAGS " -DMACRO1 -DMACRO2")   #定义一些宏

property可以从 cmake –help-property-list查看。

find_package查找的库需要怎么安装

比如包名为 PaC时,先查找 FindPac.cmake 及模块目录,如果没有则查找 PaCConfig.cmake 或 pac-config.cmake。
后一种情况一般需要使用cmake安装这个库到默认路径,才能搜索到。
一些库比如jsoncpp需要在cmake配置时指定生成Config才会保存配置文件

# build 文件夹内
cmake .. -DJSONCPP_WITH_CMAKE_PACKAGE=ON
make
sudo make install

cmake中find_package命令可以添加 QUITE REQUIRED EXACT等参数,作用自查。

在CC_FLAGS中添加其他flag

比如要在nvcc的flags中后面添加一些flags,因为本身类型为list,可以直接使用list(APPEND)来添加。

file(GLOB PATH_SRCS dir1/*.cu dir2/*.cpp)                               #查找文件path
set(CUDA_PROPAGATE_HOST_FLAGS OFF)
list(APPEND CUDA_NVCC_FLAGS "-DMACRO1" "std=c++11" "-rdc=true" "-O3")   #添加flags

原因:
曾经把set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -DMACRO1")
写错为set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAG} -DMACRO1")
结果少了好多flag,而且这样出错了是不会报错的。

你可能感兴趣的:(cmake)