添加生成器表达式是什么


You
You 2023-12-31 01:29:12 63593
分类专栏: 资讯

添加生成器表达式

在构建系统生成期间会评估生成器表达式,以生成特定于每个构建配置的信息。

在许多目标属性(例如LINK_LIBRARIES,INCLUDE_DIRECTORIES,COMPLIE_DEFINITIONS等)的上下文中允许生成器表达式。在使用命令填充这些属性(例如target_link_libraries(),target_include_directories() ,target_compile_definitions()等)时,也可以使用它们。

生成器表达式可用于启用条件链接,编译时使用的条件定义,条件包含目录等。条件可以基于构建配置,目标属性,平台信息或任何其他可查询信息。

生成器表达式有不同类型,包括逻辑,信息和输出表达式。

逻辑表达式用于创建条件输出。基本表达式是0和1表达式。$<0:...>导致空字符串,而<1:...>导致内容“…”。它们也可以嵌套。

生成器表达式的常见用法是有条件地添加编译器标志,例如用于语言级别或警告的标志。一个不错的模式是将该信息与一个INTERFACE目标相关联,以允许该信息传播。让我们从构造一个INTERFACE目标并指定所需的C++标准级别11开始,而不是使用CMAKE_CXX_STANDARD。

所以,下面的代码:

# 指定 C++ 标准
集(CMAKE_CXX_STANDARD 11) 
set(CMAKE_CXX_STANDARD_REQUIRED True)

将被替换为:

add_library(tutorial_compiler_flags 接口)
target_compile_features(tutorial_compiler_flags 接口 cxx_std_11)

接下来,我们为项目添加所需的编译器警告标志。由于警告标志根据编译器的不同而不同,因此我们使用COMPILE_LANG_AND_ID生成器表达式来控制在给定一种语言和一组编译器ID的情况下应应用的标志,如下所示:

设置(gcc_like_cxx“$ <COMPILE_LANG_AND_ID:CXX,ARMClang,AppleClang,Clang,GNU>”)
设置(msvc_cxx“$ <COMPILE_LANG_AND_ID:CXX,MSVC>”)
target_compile_options(tutorial_compiler_flags INTERFACE 
“$ <$ {gcc_like_cxx}:$ <BUILD_INTERFACE : -Wall;-Wextra;-Wshadow;-Wformat=2;-Wunused>>" 
"$<${msvc_cxx}:$<BUILD_INTERFACE:-W3>>" 
)

查看此内容,我们看到警告标志封装在BUILD_INTERFACE条件内。这样做是为了使我们已安装项目的使用者不会继承我们的警告标志。

练习:修改MathFunctions/CMakeLists.txt,以便所有目标都具有对tutorial_compiler_flagstarget_link_libraries()调用。

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=33122
赞同 0
评论 0 条
YouL0
粉丝 0 发表 582 + 关注 私信
上周热门
银河麒麟添加网络打印机时,出现“client-error-not-possible”错误提示  1447
银河麒麟打印带有图像的文档时出错  1364
银河麒麟添加打印机时,出现“server-error-internal-error”  1150
统信桌面专业版【如何查询系统安装时间】  1072
统信操作系统各版本介绍  1069
统信桌面专业版【全盘安装UOS系统】介绍  1027
麒麟系统也能完整体验微信啦!  984
统信【启动盘制作工具】使用介绍  626
统信桌面专业版【一个U盘做多个系统启动盘】的方法  574
信刻全自动档案蓝光光盘检测一体机  483
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

添加我为好友,拉您入交流群!

请使用微信扫一扫!