一、cmake 常用变量

变量名 描述
PROJECT_BINARY_DIR 如果是 in source 编译,这个变量指得就是工程顶层目录,如果是 out-of-source 编译,指的是工程编译发生的目录。另外 _BINARY_DIR 和 CMAKE_BINARY_DIR 跟这个变量指代的内容是一致的。
PROJECT_SOURCE _DIR 不论采用何种编译方式,都是工程顶层目录。也就是在 in source 编译时,他跟 PROJECT_BINARY_DIR 等变量一致。另外 _SOURCE_DIR 和 CMAKE_SOURCE_DIR 跟这个变量指代的内容是一致的。
CMAKE_CURRENT_SOURCE_DIR 指的是当前处理的 CMakeLists.txt 所在的路径
CMAKE_CURRRENT_BINARY_DIR 如果是 in-source 编译,它跟 CMAKE_CURRENT_SOURCE_DIR 一致,如果是 out-ofsource 编译,他指的是 target 编译目录。使用 ADD_SUBDIRECTORY(src bin) 可以更改这个变量的值。
CMAKE_CURRENT_LIST_FILE 输出调用这个变量的 CMakeLists.txt 的完整路径。
CMAKE_CURRENT_LIST_LINE 输出这个变量所在的行。
CMAKE_MODULE_PATH 这个变量用来定义自己的 cmake 模块所在的路径。
SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
这时候你就可以通过 INCLUDE 指令来调用自己的模块了
EXECUTABLE_OUTPUT_PATH 前者用来重新定义目标二进制可执行文件的存放位置,后者用来重新定义目标链接库文件的存放位置。
LIBRARY_OUTPUT_PATH
CMAKE_LIBRARY_OUTPUT_DIRECTORY
CMAKE_RUNTIME_OUTPUT_DIRECTORY
CMAKE_ARCHIVE_OUTPUT_DIRECTORY
PROJECT_NAME 返回通过 PROJECT 指令定义的项目名称。

二、主要的开关选项

变量名 描述
CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS 用来控制 IF ELSE 语句的书写方式。
BUILD_SHARED_LIBS 这个开关用来控制默认的库编译方式,如果不进行设置,使用 ADD_LIBRARY 并没有指定库类型的情况下,默认编译生成的库都是静态库。
CMAKE_C_FLAGS 设置 C 编译选项,也可以通过指令 ADD_DEFINITIONS()添加
CMAKE_CXX_FLAGS 设置 C++编译选项,也可以通过指令 ADD_DEFINITIONS()添加
CMAKE_SHARED_LINKER_FLAGS 设置 编译so 链接时参数
CMAKE_MODULE_LINKER_FLAGS 设置链接时的参数 如 -Wl,-rpath

三、命令

函数名 描述
file(GLOB_RECURSE SRCS *.cpp) 递归查找查找CMakeLists.txt所在目录以及子文件夹中符合的文件,保存到SRC变量中
file(GLOB SRCS *.cpp) 查找当前CMakeLists.txt当前目录下所有符合文件
include_directories 添加了头文件的搜索路径
add_subdirectory() 将子目录添到构建中,只有这样我们的库才能够构建。
target_link_libraries() 指定链接目标时我们需要使用的库
link_directories() 指定链接目标时我们需要使用库搜索路径
SET_TARGET_PROPERTIES() 设置 so 的版本 XX.so.x.x.x
**SET_TARGET_PROPERTIES (hello PROPERTIES VERSION 1.2 SOVERSION 1)**

四、其他(编译相关选项)

-Wl,—version-script=Makefile.symbol 设置so 导出符号
-Wl,-soname,$(TARGET)
-Wl,-rpath=

选项 描述
-Wl,—version-script=Makefile.symbol 设置so 导出符号
-Wl,-soname,$(TARGET)
-Wl,-rpath= 指定程序运行时库的搜索路径
-Wl,-Map,helloworld.map 生成map文件