首页 > 其他分享 >CMake 属性之全局属性

CMake 属性之全局属性

时间:2024-10-09 18:53:43浏览次数:8  
标签:property CMake GLOBAL TEST 全局 PROPERTY 属性

【写在前面】

CMake 的全局属性是指在 CMake 配置过程中,对整个项目范围生效的设置。

这些属性不同于目标 ( Target ) 属性或目录 ( Directory ) 属性,后者仅对特定的目标或目录生效。


【正文开始】

CMake 全局范围的属性有( CMake 3.30 ):

定义全局属性:

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

标签:property,CMake,GLOBAL,TEST,全局,PROPERTY,属性
From: https://www.cnblogs.com/mengps/p/18454889

相关文章

  • WPF Binding中的RelativeSource属性
    一、简介一个在Binding中比较重要的知识点——RelativeSource.使用RelativeSource对象指向源对象。用这个可以在当前元素的基础上查找其他对象用于绑定到源对象。在实际使用Binding的过程中大部分时间Binding都放在了数据模板和控件模板中,(数据模板是控件模板用于定义控件的UI)。......
  • 数据库属性带下划线的注意事项(下划线bug)
    ①如果数据库的属性带有下划线,如下②实体类代码1packagecom.lian.pojo;23importcom.baomidou.mybatisplus.annotation.IdType;4importcom.baomidou.mybatisplus.annotation.TableField;5importcom.baomidou.mybatisplus.annotation.TableId;6importjava......
  • PTA JAVA语言 面向对象程序设计 作业二 6-2 定义学生类 定义一个学生类(Student),其中包
    6-2定义学生类分数10作者 fpc 谢谢大佬关注,不定期分享学习笔记,希望大佬能多多支持,三连必回单位 内蒙古师范大学定义一个学生类(Student),其中包括四个属性:姓名(name),年龄(age),班级号(classNo),爱好(hobby)裁判测试程序样例:/*请在这里填写答案*/测试该类的程序如下:publiccl......
  • PTA JAVA语言 面向对象程序设计 作业二 6-3 Person类 构造Person类。包括姓名(name),性
    6-3Person类 谢谢大佬关注,不定期分享学习笔记,希望大佬能多多支持,三连必回单位 山东科技大学构造Person类。包括姓名(name),性别(sex)和年龄(age)。提供所有属性的set和get函数,提供print函数打印其信息输入描述:姓名(name),性别(sex)和年龄(age)输出描述:用户信息裁判测......
  • 学习011-08-03 Numeric Properties(数字属性)
    NumericProperties(数字属性)XAFsupportsPropertyEditorsfornumericdatatypes(byte,int,decimal,long,correspondingnullabletypes,etc.)onallplatforms.However,WinForms,ASP.NETWebForms,andBlazorUIapplicationsusedifferentformattingru......
  • 学习011-08-03-01 Numeric Properties in XPO(XPO中的数字属性)
    NumericPropertiesinXPO(XPO中的数字属性)TheexamplebelowillustrateshowtoimplementNumericPropertiesinanXPOpersistentclass.下面的示例说明了如何在XPO持久类中实现数字属性。C#privatedoubledoubleProperty;publicdoubleDoubleProperty{g......
  • 学习011-08-03-02 Numeric Properties in EF Core(EF Core中的数字属性)
    NumericPropertiesinEFCore(EFCore中的数字属性)TheexamplebelowillustrateshowtoimplementNumericPropertiesinanEFCoreclass.下面的示例说明了如何在EFCore类中实现数字属性。C#publicvirtualdoubleDoubleProperty{get;set;}publicvirtual......
  • CMake使用
    构建目标和属性projectproject(<项目名称>[<编程语言>...])project(<项目名称>[VERSION<主版本号>[.<次版本号>[.<补丁版本号>[.<修订版本号>]]]][DESCRIPTION<项目描述>][HOMEPAGE_URL]<项目主页URL>[LANGUAGES<编程语......
  • 计算属性模糊查询
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title>......
  • 窗体MainWindow的属性设置2
    文章目录1.控件名称2.菜单栏A.一级菜单B.子菜单①子菜单添加快捷键②子菜单添加图标3.工具栏A.将子菜单移除工具栏B.移除工具栏4.状态栏A.移除状态栏B.状态栏显示信息状态栏一直显示信息  本章将主要介绍窗体MainWindow控件的属性设置,例如控件名称、菜单栏、......