鉴于自己破烂的英语,所以把cmake的官方文档用 谷歌翻译 翻译下来方便查看。
英语好的同学建议直接去看cmake官方文档(英文)学习:地址 点这里
或复制:https://cmake.org/cmake/help/latest/guide/tutorial/index.html
因为官方文档有点多,所以只截取CMake Tutorial的 step1——step12 进行翻译,这是第4步的翻译,以下是每一步的翻译链接:
Documentation » CMake Tutorial » Step 1: A Basic Starting Point
Documentation » CMake Tutorial » Step 2: Adding a Library
Documentation » CMake Tutorial » Step 3: Adding Usage Requirements for a Library
[Documentation » CMake Tutorial » Step 4: Adding Generator Expressions]
Documentation » CMake Tutorial » Step 5: Installing and Testing
Documentation » CMake Tutorial » Step 6: Adding Support for a Testing Dashboard
Documentation » CMake Tutorial » Step 7: Adding System Introspection
Documentation » CMake Tutorial » Step 8: Adding a Custom Command and Generated File
Documentation » CMake Tutorial » Step 9: Packaging an Installer
Documentation » CMake Tutorial » Step 10: Selecting Static or Shared Libraries
Documentation » CMake Tutorial » Step 11: Adding Export Configuration
Documentation » CMake Tutorial » Step 12: Packaging Debug and Release
谷歌翻译可能有错,此文档的目的仅是加快观看英文官方文档的速度,所以请结合英文官方文档观看
Step 4: Adding Generator Expressions
生成器表达式在构建系统生成期间进行评估,以生成特定于每个构建配置的信息。
许多目标属性的上下文中都允许使用生成器表达式,例如 LINK_LIBRARIES、INCLUDE_DIRECTORIES、COMPILE_DEFINITIONS 等。 当使用命令填充这些属性时也可以使用它们,例如 target_link_libraries()、target_include_directories()、target_compile_definitions() 等。
生成器表达式可用于启用条件链接、编译时使用的条件定义、条件包含目录等。 这些条件可以基于构建配置、目标属性、平台信息或任何其他可查询信息。
生成器表达式有不同类型,包括逻辑表达式、信息表达式和输出表达式。
逻辑表达式用于创建条件输出。 基本表达式是 0 和 1 表达式。 $<0:…> 产生空字符串,<1:…> 产生…的内容。它们也可以嵌套。
Exercise 1 - Adding Compiler Warning Flags with Generator Expressions(练习 1 - 使用生成器表达式添加编译器警告标志)
生成器表达式的常见用法是有条件地添加编译器标志,例如语言级别或警告的标志。 一个很好的模式是将此信息关联到允许此信息传播的 INTERFACE 目标。
Goal
在构建时添加编译器警告标志,但不适用于已安装的版本。
Helpful Resources
cmake-generator-expressions(7)、
cmake_minimum_required()
set()
target_compile_options()
Files to Edit
CMakeLists.txt
Getting Started
打开文件 Step4/CMakeLists.txt 并完成 TODO 1 到 TODO 4。
首先,在顶层 CMakeLists.txt 文件中,我们需要将 cmake_minimum_required() 设置为 3.15。 在本练习中,我们将使用 CMake 3.15 中引入的生成器表达式。
接下来,我们添加项目所需的编译器警告标志。 由于警告标志因编译器而异,我们使用 COMPILE_LANG_AND_ID 生成器表达式来控制给定语言和一组编译器 ID 应用哪些标志。
Build and Run
创建一个名为 Step4_build 的新目录,运行 cmake 可执行文件或 cmake-gui 来配置项目,然后使用您选择的构建工具或使用 cmake --build 来构建它。 从构建目录。
mkdir Step4_build
cd Step4_build
cmake …/Step4
cmake --build .
Solution
更新 cmake_minimum_required() 以至少需要 CMake 版本 3.15:
TODO 1: CMakeLists.txt
cmake_minimum_required(VERSION 3.15)
接下来,我们确定我们的系统当前使用哪个编译器来构建,因为警告标志根据我们使用的编译器而有所不同。 这是通过 COMPILE_LANG_AND_ID 生成器表达式完成的。 我们将结果设置在变量 gcc_like_cxx 和 msvc_cxx 中,如下所示:
TODO 2: CMakeLists.txt
set(gcc_like_cxx “$<COMPILE_LANG_AND_ID:CXX,ARMClang,AppleClang,Clang,GNU,LCC>”)
set(msvc_cxx “$<COMPILE_LANG_AND_ID:CXX,MSVC>”)
接下来,我们添加项目所需的编译器警告标志。 使用变量 gcc_like_cxx 和 msvc_cxx,我们可以使用另一个生成器表达式仅在变量为 true 时应用相应的标志。 我们使用 target_compile_options() 将这些标志应用到我们的界面库。
TODO 3: CMakeLists.txt
target_compile_options(tutorial_compiler_flags INTERFACE
“$<${gcc_like_cxx}:-Wall;-Wextra;-Wshadow;-Wformat=2;-Wunused>”
“$<${msvc_cxx}:-W3>”
)
最后,我们只希望在构建期间使用这些警告标志。 我们已安装项目的使用者不应继承我们的警告标志。 为了指定这一点,我们使用 BUILD_INTERFACE 条件将 TODO 3 中的标志包装在生成器表达式中。 生成的完整代码如下所示:
TODO 4: CMakeLists.txt
target_compile_options(tutorial_compiler_flags INTERFACE
“$<${gcc_like_cxx}:$<BUILD_INTERFACE:-Wall;-Wextra;-Wshadow;-Wformat=2;-Wunused>>”
“$<${msvc_cxx}:$<BUILD_INTERFACE:-W3>>”
)