学习开源项目时候遇到的cmake命令,做一些记录,命令的功能解释得相对单一,遇到不一样的用法再作更新。
add_compile_options(-idirafter)
添加编译选项 比如-std=c++11 针对所有编译器
set(CMAKE_CXX_FLAGS -O3 -fPIC) 只针对c++编译器
set(CMAKE_C_FLAGS -O3 -fPIC) 只针对c编译器include_directories()
表示引入头文件搜索路径find_package(Eigen3 REQUIRED) find_package(Qt5 COMPONENTS Core REQUIRED)
批量引入库文件和头文件
REQUIRED:必须找到该库,找不到就报错
COMPONENTS:从库中找子库(模块)xx,比如COMPONENTS Core 表示找到子模块Corelink_directories()
将头文件目录引入到当前工程——添加.lib库文件的搜索路径
link_libraries()
表示将具体的库文件引入到当前工程中,所填入的路径必须是全路径
target_link_libraries(qt_test Qt5::Core )
连接Core.dll到qt_test.exe
target_include_directories()
将头文件目录针对性的引入到目标子工程(当前工程一般可以包含多个子工程)set()
设置普通变量 set( … [PARENT_SCOPE])
设置缓存条目 set( … CACHE [FORCE])
设置环境变量 set(ENV{} [])ExternalProject_Add()
使用ExternalProject来管理项目的第三方依赖,包括配置、下载等,注意需要先带入插件include(ExternalProject)add_subdirectory (source_dir [binary_dir] [EXCLUDE_FROM_ALL])
添加一个子目录并构建该子目录
source_dir 该参数指定一个子目录,子目录下应该包含CMakeLists.txt文件和代码文件
binary_dir 该参数指定一个目录,用于存放输出文件
EXCLUDE_FROM_ALL 当指定了该参数,则子目录下的目标不会被父目录下的目标文件包含进去,父目录的CMakeLists.txt不会构建子目录的目标文件,必须在子目录下显式去构建install()
命令为项目生成一系列的安装规则
安装目标文件 install(TARGETS <target_name> [RUNTIME | LIBRARY | ARCHIVE] DESTINATION <target_dir> … )
安装普通文件 install(<FILES|PROGRAMS> files…DESTINATION < dir> …)
安装非目标文件的可执行程序,比如脚本类 INSTALL(PROGRAMS files… DESTINATION < dir> … )
安装目录 install(DIRECTORY <target_name> DESTINATION <target_name> …)add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [source1] [source2 ...])
使用指定的源文件向项目(project)中添加库