一、cmake 常用变量
变量名 | 描述 |
---|---|
PROJECT_BINARY_DIR | 如果是 in source 编译,这个变量指得就是工程顶层目录,如果是 out-of-source 编译,指的是工程编译发生的目录。另外 |
PROJECT_SOURCE _DIR | 不论采用何种编译方式,都是工程顶层目录。也就是在 in source 编译时,他跟 PROJECT_BINARY_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文件 |