定义属性

定义和记录自定义属性。

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    = associated with the global namespace
DIRECTORY = associated with one directory
TARGET    = associated with one target
SOURCE    = associated with one source file
TEST      = associated with a test named with add_test
VARIABLE  = documents a CMake language variable
CACHED_VARIABLE = documents a CMake cache variable

请注意,与 set_property()get_property() 不同,不需要给出实际范围;只有范围的种类很重要。

所需的 PROPERTY 选项紧跟在被定义的属性的名称之后。

如果给出了 INHERITED 选项,那么 get_property() 命令将链接到下一个更高的范围,当请求的属性没有在给定命令的范围内设置时。

  • DIRECTORY 范围链接到其父目录的范围,继续向上父目录直到目录具有属性集或没有更多的父目录。如果仍未在顶级目录中找到,它将链接到 GLOBAL 范围。

  • TARGETSOURCETEST 属性链接到 DIRECTORY 范围,包括根据需要进一步链接目录等。

请注意,此范围链接行为仅适用于对 get_property()get_directory_property()get_target_property()get_source_file_property()get_test_property() 的调用。 *设置*属性时没有继承行为,因此使用 APPENDAPPEND_STRINGset_property() 命令在计算要附加到的内容时不会考虑继承值。

BRIEF_DOCSFULL_DOCS 选项后跟与属性相关联的字符串,作为其简短和完整的文档。除了通过 get_property() 命令的相应选项使其对项目可用之外,CMake 不使用此文档。

在 3.23 版本发生变更: BRIEF_DOCSFULL_DOCS 选项是可选的。

在 3.23 版本加入: INITIALIZE_FROM_VARIABLE 选项指定一个变量,应该从该变量初始化属性。它只能与目标属性一起使用。 <variable> 名称必须以属性名称结尾,并且不得以 CMAKE__CMAKE_ 开头。属性名称必须至少包含一个下划线。建议属性名称具有特定于项目的前缀。

也可以看看