CMake官方教程中文翻译 Step 4: Adding Generator Expressions

本文介绍了如何使用CMake的生成器表达式在CMakeLists.txt中为不同编译器添加条件编译器警告,以在构建期间生效但不传递给安装版本。步骤包括设置CMake版本、识别编译器、应用警告标志并使用BUILD_INTERFACE条件控制警告传播。
摘要由CSDN通过智能技术生成

鉴于自己破烂的英语,所以把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>>”
)

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值