CMake 属性之全局属性

news/2024/10/9 18:45:17/文章来源:https://www.cnblogs.com/mengps/p/18454889

【写在前面】

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 选项,字符串将作为字符串附加到任何现有属性值,即它会产生更长的字符串而不是字符串列表。当使用 APPENDAPPEND_STRING 以及定义为支持 INHERITED 行为的属性时(请参阅 :command:define_property),在找到要附加到的初始值时不会发生继承。如果该属性尚未在指定范围内直接设置,则该命令的行为就好像没有给出 APPENDAPPEND_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_DOCSFULL_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 输出如下:

image


【结语】

项目链接(多多star呀..⭐_⭐):

Github 地址:https://github.com/mengps/LearnCMake

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/810683.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自然人信息社工

人,是网络安全全流程中最大的弱点。针对人的攻击往往有出奇不意的效果。而想要利用人的弱点进行攻击,那么对目标的信息收集与了解就是非常重要的了。这篇文章记录了一些常用的用于对人进行身份信息收集的技术。这些技术常被用于溯源取证、社工攻击。 0x00 社工分析中的身份信…

Linux软中断ksoftirqd

前言 在上一篇 LINUX软中断-softirq的描述中,提到过ksoftirqd,这篇文章就介绍ksoftirqd ksoftirqd 是什么? ksoftirqd 是个内核线程,在创建的时候是绑定cpu的,每一个core对应生成一个ksoftirqd 线程 比如当前系统有4个core ~# ps aux | grep ksoftirqd root 3 0.0…

WPF Binding中的RelativeSource属性

一、简介 一个在Binding中比较重要的知识点——RelativeSource. 使用RelativeSource对象指向源对象。用这个可以在当前元素的基础上查找其他对象用于绑定到源对象。在实际使用Binding的过程中大部分时间Binding都放在了数据模板和控件模板中,(数据模板是控件模板用于定义控件…

信息学奥赛复赛复习15-CSP-J2022-01乘方-数据类型、类型转换、数据类型溢出、指数、模拟指数运算

PDF文档公众号回复关键字:202410091 P8813 [CSP-J 2022] 乘方 [题目描述] 小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数 a 和 b,求 a^b 的值是多少。 a^b 即 b 个 a 相乘的值,例如 2^3 即为 3 个 2 相乘,结果为 222=8 “简单!”小文心想,同时很快…

Postman 教程:新手必备的操作指南

API 已经成为连接不同系统和服务的重要桥梁,无论你是前端开发者、后端工程师还是测试人员,掌握 API 的开发和测试技能都是非常重要的。Postman 是一个广受欢迎的 API 开发工具,它不仅能够帮助你轻松发送 HTTP 请求,还提供了强大的测试、调试和协作功能。本系列教程旨在帮助…

20222327 2024-2025-1 《网络与系统攻防技术》实验一实验报告

一.实验内容 1.了解Linux系统下的基本操作命令,能够处理一些命令出现的error。 2.掌握了栈与堆的概念以及在进程内存管理中的应用。 3.了解基本的汇编语言指令及其功能。 4.能够深刻理解BoF的原理以及如何运用payload完成BoF的攻击 二.实验过程 任务一 直接修改程序机器指令,…

春秋云镜 Privilege

春秋云镜 Privilege上来先用fscan扫一下.___ _ / _ \ ___ ___ _ __ __ _ ___| | __ / /_\/____/ __|/ __| __/ _` |/ __| |/ / / /_\\_____\__ \ (__| | | (_| | (__| < \____/ |___/\___|_| \__,_|\___|_|\_\ fscan ve…

AI在不同领域的应用与行业影响

本文将探讨AI在不同技术领域和行业中的广泛应用,以及这些应用如何影响和改变我们的世界。 I. 引言 AI技术正日益渗透到各个技术领域,从计算机视觉到自然语言处理,再到音频处理,AI的应用正变得越来越广泛。这些技术的发展不仅推动了科学研究的进步,也在实际应用中展现出巨大…

多态和继承

继承:通常意思就是儿子可以继承父亲的东西,在java里面也是一样的,当我们在同一个包内有多个类的成员变量/方法相同时可以使用继承,只可以在子非静态方法使用 继承就是把相同的成员变量/成员方法放在一个类中,然后使用extends这个关键字来让一个类来继承另一类从而达到代码…

Apache DolphinScheduler社区9月进展记录

各位热爱 Apache DolphinScheduler 的小伙伴们,社区 9 月月报更新啦!这里将记录 Apache DolphinScheduler 社区每月的重要更新,欢迎关注! 月度 Merge Star 感谢以下小伙伴上个月为 Apache DolphinScheduler 做的精彩贡献(排名不分先后):@Mighten,@ChaoquanTao,@wangxj3,…