添加生成器表达式

添加生成器表达式


下一篇:练习5 安装和测试,上一篇:练习3 添加库的使用要求目录首页

温故知新

经过第一个练习,大家对于基本的使用应该已经掌握了,由于代码过多,在文档中详细介绍太过于啰嗦,大家可以自行下载代码参考

Generator expressions在构建系统生成期间进行评估,以生成特定于每个构建配置的信息。

Generator expressions在许多目标属性的上下文中允许,例如LINK_LIBRARIES, INCLUDE_DIRECTORIES,COMPILE_DEFINITIONS和别的。当使用命令填充这些属性时也可以使用它们,例如 target_link_libraries(),target_include_directories(), target_compile_definitions()和别的。

Generator expressions 可用于启用条件链接、编译时使用的条件定义、条件包含目录等。这些条件可以基于构建配置、目标属性、平台信息或任何其他可查询信息。

有不同类型的 generator expressions包括逻辑、信息和输出表达式。


下一篇:练习5 安装和测试,上一篇:练习3 添加库的使用要求目录首页

使用生成器表达式添加编译器警告标志

一个常见的用法是 generator expressions是有条件地添加编译器标志,例如语言级别或警告的标志。INTERFACE 一个很好的模式是将此信息与允许此信息传播的目标相关联。


下一篇:练习5 安装和测试,上一篇:练习3 添加库的使用要求目录首页

cmake-generator-expressions

cmake-generator-expressions()(CMake 生成器表达式)是一种在 CMake 构建系统中用于生成构建文件的特殊表达式。它们允许你在构建时根据不同的生成器和目标属性来生成不同的编译和链接选项。

Generator Expressions 可以在 CMake 的不同命令中使用,以便更精细地控制构建过程。这些表达式通常包含在 $< > 标记中,以区分它们与普通 CMake 变量和属性。

以下是一些常见的 Generator Expressions 的用法:

  1. 条件编译:你可以使用 if 表达式来根据不同的构建配置或目标属性条件编译部分代码。例如:

    target_compile_definitions(mytarget PRIVATE $<$<CONFIG:Debug>:DEBUG_MODE>)
    

    这将在 Debug 构建配置下添加 DEBUG_MODE 宏定义。

  2. 条件链接库:你可以使用 target_link_libraries 命令中的 Generator Expressions 来根据不同的条件链接不同的库。例如:

    target_link_libraries(mytarget PRIVATE $<$<CONFIG:Release>:optimized some_lib>)
    

    这将在 Release 构建配置下链接 some_lib 库。

  3. 选择源文件:你可以使用 Generator Expressions 来根据不同条件选择要编译的源文件。例如:

    set(sources
        source1.cpp
        $<$<CONFIG:Debug>:debug_source.cpp>
    )
    add_executable(mytarget ${sources})
    

    这将在 Debug 构建配置下编译 debug_source.cpp

  4. 目标属性:你可以使用 Generator Expressions 访问目标的属性,以便在不同情况下配置目标。例如:

    target_compile_options(mytarget PRIVATE $<TARGET_PROPERTY:mylib,INTERFACE_COMPILE_OPTIONS>)
    

    这将为 mytarget 设置与 mylib 相同的接口编译选项。

Generator Expressions 在 CMake 中提供了灵活的方式来根据不同条件自定义构建过程,使构建系统适应不同的需求和平台。它们通常在条件编译、不同的构建配置和目标属性之间提供了精细的控制。


下一篇:练习5 安装和测试,上一篇:练习3 添加库的使用要求目录首页

cmake_minimum_required

cmake_minimum_required()已经在练习1 构建一个基本项目介绍过,不在赘述。


下一篇:练习5 安装和测试,上一篇:练习3 添加库的使用要求目录首页

set函数

在CMake中,set()已经在练习1 构建一个基本项目介绍过,不在赘述。


下一篇:练习5 安装和测试,上一篇:练习3 添加库的使用要求目录首页

target_compile_options

target_compile_options()已经在练习3 添加库的使用要求介绍过,不在赘述。


下一篇:练习5 安装和测试,上一篇:练习3 添加库的使用要求目录首页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值