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,而且这样出错了是不会报错的。