CMake 属性之全局属性
【写在前面】
CMake 的全局属性是指在 CMake 配置过程中,对整个项目范围生效的设置。
这些属性不同于目标 ( Target ) 属性或目录 ( Directory ) 属性,后者仅对特定的目标或目录生效。
【正文开始】
CMake 全局范围的属性有( CMake 3.30 ):
- ALLOW_DUPLICATE_CUSTOM_TARGETS
- AUTOGEN_SOURCE_GROUP
- AUTOGEN_TARGETS_FOLDER
- AUTOMOC_SOURCE_GROUP
- AUTOMOC_TARGETS_FOLDER
- AUTORCC_SOURCE_GROUP
- AUTOUIC_SOURCE_GROUP
- CMAKE_C_KNOWN_FEATURES
- CMAKE_CUDA_KNOWN_FEATURES
- CMAKE_CXX_KNOWN_FEATURES
- CMAKE_HIP_KNOWN_FEATURES
- CMAKE_ROLE
- DEBUG_CONFIGURATIONS
- DISABLED_FEATURES
- ECLIPSE_EXTRA_CPROJECT_CONTENTS
- ECLIPSE_EXTRA_NATURES
- ENABLED_FEATURES
- ENABLED_LANGUAGES
- FIND_LIBRARY_USE_LIB32_PATHS
- FIND_LIBRARY_USE_LIB64_PATHS
- FIND_LIBRARY_USE_LIBX32_PATHS
- FIND_LIBRARY_USE_OPENBSD_VERSIONING
- GENERATOR_IS_MULTI_CONFIG
- GLOBAL_DEPENDS_DEBUG_MODE
- GLOBAL_DEPENDS_NO_CYCLES
- INSTALL_PARALLEL
- IN_TRY_COMPILE
- JOB_POOLS
- PACKAGES_FOUND
- PACKAGES_NOT_FOUND
- PREDEFINED_TARGETS_FOLDER
- PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE
- REPORT_UNDEFINED_PROPERTIES
- RULE_LAUNCH_COMPILE
- RULE_LAUNCH_CUSTOM
- RULE_LAUNCH_LINK
- RULE_MESSAGES
- TARGET_ARCHIVES_MAY_BE_SHARED_LIBS
- TARGET_MESSAGES
- TARGET_SUPPORTS_SHARED_LIBS
- USE_FOLDERS
- XCODE_EMIT_EFFECTIVE_PLATFORM_NAME
定义全局属性:
define_property(<GLOBAL | DIRECTORY | TARGET | SOURCE |
TEST | VARIABLE | CACHED_VARIABLE>
PROPERTY <name> [INHERITED]
[BRIEF_DOCS <brief-doc> [docs...]]
[FULL_DOCS <full-doc> [docs...]]
[INITIALIZE_FROM_VARIABLE <variable>])
在范围内定义一个属性,用于 set_property() 和 get_property() 命令。它主要用于定义属性的初始化或继承方式。从历史上看,该命令还将文档与属性相关联,但这不再被视为主要用例。
示例:
# 定义一个名为 GLOBAL_PROPERTY_TEST 的全局属性
define_property(GLOBAL
# 全局属性的名称
PROPERTY GLOBAL_PROPERTY_TEST
# 简短的文档说明
BRIEF_DOCS "A global property test"
# 完整的文档说明
FULL_DOCS "A global property test"
)
设置全局属性:
set_property(<GLOBAL |
DIRECTORY [<dir>] |
TARGET [<target1> ...] |
SOURCE [<src1> ...]
[DIRECTORY <dirs> ...]
[TARGET_DIRECTORY <targets> ...] |
INSTALL [<file1> ...] |
TEST [<test1> ...] |
CACHE [<entry1> ...] >
[APPEND] [APPEND_STRING]
PROPERTY <name> [<value1> ...])
在范围的零个或多个对象上设置一个属性。
GLOBAL
范围是唯一的,不接受名称。如果给出
APPEND
选项,列表将附加到任何现有的属性值(除了忽略和不附加空值)。如果给出APPEND_STRING
选项,字符串将作为字符串附加到任何现有属性值,即它会产生更长的字符串而不是字符串列表。当使用APPEND
或APPEND_STRING
以及定义为支持INHERITED
行为的属性时(请参阅 :command:define_property
),在找到要附加到的初始值时不会发生继承。如果该属性尚未在指定范围内直接设置,则该命令的行为就好像没有给出APPEND
或APPEND_STRING
一样。
示例:
# 设置全局属性 GLOBAL_PROPERTY_TEST 为 ON
set_property(GLOBAL PROPERTY GLOBAL_PROPERTY_TEST ON)
获取全局属性:
get_property(<variable>
<GLOBAL |
DIRECTORY [<dir>] |
TARGET <target> |
SOURCE <source>
[DIRECTORY <dir> | TARGET_DIRECTORY <target>] |
INSTALL <file> |
TEST <test> |
CACHE <entry> |
VARIABLE >
PROPERTY <name>
[SET | DEFINED | BRIEF_DOCS | FULL_DOCS])
从范围内的一个对象获取一个属性。
GLOBAL
范围是唯一的,不接受名称。如果给出了
SET
选项,变量将被设置为一个布尔值,指示该属性是否已被设置。如果给出了DEFINED
选项,变量将被设置为一个布尔值,指示该属性是否已被定义,例如使用define_property
命令。 如果给出了BRIEF_DOCS
或FULL_DOCS
,那么该变量将被设置为一个字符串,其中包含所请求属性的文档。如果为尚未定义的属性请求文档,则返回“NOTFOUND
”。
示例:
# 获取全局属性 GLOBAL_PROPERTY_TEST 的值,并将结果存储在变量 IS_GLOBAL 中
get_property(IS_GLOBAL GLOBAL PROPERTY GLOBAL_PROPERTY_TEST)
其中,有一个专用于获取 CMake 全局属性
命令:
get_cmake_property(<var> <property>)
从 CMake 实例获取全局属性。
<property>
的值存储在变量<var>
中。如果未找到该属性,<var>
将被设置为NOTFOUND
。有关可用属性,请参阅 cmake-properties(7) 手册。除了全局属性,此命令(出于历史原因)还支持 VARIABLES 和 MACROS 目录属性。它还支持一个特殊的
COMPONENTS
全局属性,该属性列出了提供给 install() 命令的组件。
示例:
# 获取当前 CMake 角色,并将结果存储在变量 ROLE 中
get_cmake_property(ROLE CMAKE_ROLE)
最后完整测试一遍:
# 要求 CMake 最低版本为 3.16
cmake_minimum_required(VERSION 3.16)
# 定义一个名为 GLOBAL_PROPERTY_TEST 的全局属性
define_property(GLOBAL
# 全局属性的名称
PROPERTY GLOBAL_PROPERTY_TEST
# 简短的文档说明
BRIEF_DOCS "A global property test"
# 完整的文档说明
FULL_DOCS "A global property test"
)
# 设置全局属性 GLOBAL_PROPERTY_TEST 为 ON
set_property(GLOBAL PROPERTY GLOBAL_PROPERTY_TEST ON)
# 获取全局属性 GLOBAL_PROPERTY_TEST 的值,并将结果存储在变量 IS_GLOBAL 中
get_property(IS_GLOBAL GLOBAL PROPERTY GLOBAL_PROPERTY_TEST)
# 打印变量 IS_GLOBAL 的值,用于确认全局属性是否已设置
message("IS_GLOBAL: ${IS_GLOBAL}")
# 获取当前 CMake 角色,并将结果存储在变量 ROLE 中
get_cmake_property(ROLE CMAKE_ROLE)
# 打印变量 ROLE 的值,用于显示当前 CMake 角色
message("ROLE: ${ROLE}")
CMake 输出如下:
【结语】
项目链接(多多star呀.._):
Github 地址:https://github.com/mengps/LearnCMake
CMake 属性之全局属性的更多相关文章
- HTML表单属性与全局属性
1.全局属性
- JavaScript常用全局属性与方法
最近,在学习JavaScript,Java作域链包含全局,记录下常用的全局属性与方法,就当是知识的积累,未列出全部,如需查看全部可参考JS相关的API文档. 常用的全局属性: 全局属性 作 ...
- HTML5全局属性汇总
局部属性和全局属性 局部属性:有些元素能规定自己的属性,这种属性称为局部属性.比如link元素,它具有的局部属性有href. rel. hreflang. media. type. sizes这六个. ...
- HTML中的全局属性
一.全局属性和局部属性 每种元素都有自己规定的属性,这种属性成为局部属性.还有另外一种属性,他可以用来配置所有元素的共有行为,这种属性成为称为全局属性.全局属性可以用在任何一个元素身上,但是不一定会带 ...
- 原生JS:全局属性、全局方法详解
全局属性.全局方法 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5853342.html 首先普及几个我总结的非常实用又很基础的知识:(呵呵,仅 ...
- HTML5全局属性和事件详解
属性: HTML5属性能够赋给标签元素含义和语境,下面的全局属性可用于任何 HTML5 元素. 属性 描述 contenteditable 规定是否允许用户编辑内容. contextmenu 规定元素 ...
- HTML的16个全局属性
前面的话 在HTML中,属性能表达相当丰富的语义,而且属性也会额外提供很多实用的功能,HTML共支持16个常见的全局属性. HTML原有属性 accesskey 作用:浏览器用来创建激活或聚焦元素的快 ...
- html5全局属性
全局属性:对于任何一个标签都是可以使用的属性. 一.data-* 在html5之前需要在html标签上添加自定义属性来存储和操作数据,可能是会写<form role="xxx" ...
- JavaScript 全局属性/函数
JavaScript 全局 JavaScript 全局属性和方法可用于创建Javascript对象. JavaScript 全局属性 属性 描述 Infinity 代表正的无穷大的数值. NaN 指示 ...
- HTML5全局属性和事件
全局属性和事件能够应用到所有标签元素上,在HTML4中有许多全局属性,比如id,class等.HTML5中又新增了一些特殊功能的全局属性和事件. 属性: HTML5属性能够赋给标签元素含义和语 ...
随机推荐
- Excel函数-相对引用和绝对引用
1.相对引用 公式填充时引用的相对位置不变,行和列.序号都相对递增 2.绝对引用 公式填充时应用的单元格绝对位置不变,行和列.序号都不变.绝对引用的符号是"$",也可以快捷键按F4 ...
- 【Layui】08 时间线 Timeline
文档地址: https://www.layui.com/demo/timeline.html 常规时间线: <ul class="layui-timeline"> &l ...
- 一个域名可以对应多个IP吗,一个IP可以对应多个域名吗?
本文谈两个问题:一个域名可以对应多个IP吗,一个IP可以对应多个域名吗? 问题1:一个IP可以对应多个域名吗? 因为域名都是由各个域名供应商提供的,我们可以在不同的域名供应商那里买不同的域名,然后把这 ...
- batch_norm在强化学习中建议使用的形式
def batch_norm(layer, **kwargs): """ Apply batch normalization to an existing layer. ...
- baselines库中cmd_util.py模块对atari游戏的包装为什么要分成两部分并在中间加入flatten操作呢?
如题: cmd_util.py模块中对应的代码: 可以看到不论是atari游戏还是retro游戏,在进行游戏环境包装的时候都是分成两部分的,如atari游戏,第一部分是make_atari,第二部分是 ...
- (数据科学学习手札163)ibis:极具潜力的Python数据分析框架
本文完整代码及附件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,今天要给大家介绍的Pyt ...
- 武汉市委郭元强书记、盛阅春代市长会见白鲸开源CEO郭炜等嘉宾代表
2024年6月14日,第二届软件创新发展大会在中国武汉举行.大会云集了来自全国的书数百位院士.专家.知名软件企业负责人,包括中国工程院院士倪光南.中国科学院院士陈十一.国家工业信息安全发展研究中心总工 ...
- 【全】CSS动画大全之按钮【c】
效果预览 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...
- AT Educational DP Contest
https://atcoder.jp/contests/dp J - Sushi 设 \(f[i,j,k]\) 表示有 \(1/2/3\) 个寿司的盘子有 \(i/j/k\) 个 考虑随机到哪种盘子列 ...
- 瑞芯微 | I2S-音频基础 -1
最近调试音频驱动,顺便整理学习了一下i2s.alsa相关知识,整理成了几篇文章,后续会陆续更新. 喜欢嵌入式.Li怒晓得老铁可以关注一口君账号. 1. 音频常用术语 名称 含义 ADC(Analog ...