【CMake】第5章 配置和构建时的操作
mkdir -p build
cd build
cmake .. # 在build文件夹中生成 项目的配置;
cmake --build . # 编译可执行文件(也被称为构建示例项目)
5.1 使用和平台无关的文件操作
- 展示如何以可移植的方式下载库文件;
- 使用-E标志可以以操作系统无关的方式运行许多公共操作(调用CMake命令本身来执行实际工作);
- 构建过程中,必须执行一系列没有输出的命令时,可以使用
add_custon_target
命令;
5.2 配置时 运行自定义命令
讨论如何使用execute_process
命令在配置时运行定制化命令;
5.3 构建时 运行自定义命令I:使用add_custom_command
5.4 构建时 运行自定义命令II:使用add_custom_target
5.6 探究编译和链接命令
- 如何确保代码能成功编译为可执行文件;
- 如何确保编译器理解相应标志位;
- 如何确保特定代码能成功编译成可执行程序;
try_compile
生成一个小项目,将编译成功或失败的状态保存在omp_taskloop_teset_1
;
check_cxx_source_compiles
函数,将检查结果保存到omp_taskloop_test_2
变量中;
5.7 探究编译器标志命令
Sanitizers:静态和动态代码分析非常有用的工具。
使用方式:设置标志位,重新编译代码可以检查内存错误、未初始化读取,线程安全;
## 疑问1:CMAKE_REQUIRED_FLAGS变量的作用
#设置 CMAKE_REQUIRED_FLAGS 变量, check_cxx_compiler_flag 函数在内部使用该变量
set(CMAKE_REQUIRED_FLAGS ${ASAN_FLAGS})
#调用 check_cxx_compiler_flag 来确保编译器理解 ASAN_FLAGS 变量中的标志
check_cxx_compiler_flag(${ASAN_FLAGS} asan_works)
#取消设置 CMAKE_REQUIRED_FLAGS
unset(CMAKE_REQUIRED_FLAGS)## 疑问2:target_compile_options函数的作用:为库、可执行文件设置编译选项;target_compile_options(<target> [BEFORE]<INTERFACE|PUBLIC|PRIVATE> [items1...][<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
##编译选项可以添加三个级别的可见性: INTERFACE 、 PUBLIC 和 PRIVATE 。可见性的含义如下:
## PRIVATE,编译选项会应用于给定的目标,不会传递给与目标相关的目标。比如,即使exe将链接到A库,exe也不会继承A目标上设置的编译器选项。
## INTERFACE,给定的编译选项将只应用于指定目标,并传递给与目标相关的目标。
## PUBLIC,编译选项将应用于指定目标和使用它的目标
未完待续