> 文章列表 > 【CMake】第5章 配置和构建时的操作

【CMake】第5章 配置和构建时的操作

【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 探究编译和链接命令

  1. 如何确保代码能成功编译为可执行文件;
  2. 如何确保编译器理解相应标志位;
  3. 如何确保特定代码能成功编译成可执行程序;

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,编译选项将应用于指定目标和使用它的目标

未完待续