cmake:Properties of Global Scope

ALLOW_DUPLICATE_CUSTOM_TARGETS

允许创建重复的自定义目标。

通常CMake要求项目中构建的所有目标都具有全局唯一的逻辑名称(参见策略CMP0002)。这对于在Xcode和Visual Studio Generators IDE生成器中生成有意义的项目文件名是必要的。它还允许毫无歧义地引用目标名称。

生成文件生成器能够支持重复的add_custom_target()名称。对于只关心Makefile Generators并且不希望支持Xcode或Visual Studio Generators IDE生成器的项目,可以将此属性设置为True以允许重复的自定义目标。该属性允许在不同目录中多次调用add_custom_target()命令来指定相同的目标名称。但是,设置此属性将导致非makefile生成器产生错误并拒绝生成项目。

AUTOGEN_SOURCE_GROUP

3.9新版功能。

AUTOMOC、AUTORCC和AUTOUIC生成文件的source_group()的名称。

AUTOMOC、AUTORCC和AUTOUIC生成的文件在配置时并不总是已知的,因此不能传递给source_group()。AUTOGEN_SOURCE_GROUP可以用来代替为autooc、AUTORCC和AUTOUIC生成的文件生成或选择一个源组。

对于AUTOMOC, AUTORCC和AUTOUIC的特定覆盖分别参见AUTOMOC_SOURCE_GROUP, AUTORCC_SOURCE_GROUP和AUTOUIC_SOURCE_GROUP

AUTOGEN_TARGETS_FOLDER

*_autogen目标的文件夹名,这些目标由CMake为启用了AUTOMOC的目标自动添加。

如果没有设置,CMake将使用父目标的FOLDER属性作为该属性的默认值。请参见FOLDER目标属性和AUTOMOC目标属性的文档。

AUTOMOC_SOURCE_GROUP

3.9新版功能。

AUTOMOC生成文件的source_group()的名称。

当设置此参数时,将代替AUTOGEN_SOURCE_GROUP用于AUTOMOC生成的文件。

AUTOMOC_TARGETS_FOLDER

*_autogen目标的文件夹名,这些目标由CMake为启用了AUTOMOC的目标自动添加。

这个属性已经过时了。使用AUTOGEN_TARGETS_FOLDER代替。

如果没有设置,CMake将使用父目标的FOLDER属性作为该属性的默认值。请参见FOLDER目标属性和AUTOMOC目标属性的文档。

AUTORCC_SOURCE_GROUP

3.9新版功能。

AUTORCC生成文件的source_group()的名称。

当设置此参数时,AUTORCC生成的文件将使用此参数代替AUTOGEN_SOURCE_GROUP。

AUTOUIC_SOURCE_GROUP

3.21新版功能。

AUTOUIC生成文件的source_group()的名称。

当设置此参数时,用于AUTOUIC生成的文件,而不是AUTOGEN_SOURCE_GROUP。

CMAKE_C_KNOWN_FEATURES

3.1新版功能。

CMake版本已知的C特性列表。

这个全局属性中列出的特性可能已知对C编译器可用。如果该特性在C编译器中可用,它将被列在CMAKE_C_COMPILE_FEATURES变量中。

这里列出的特性可以与target_compile_features()命令一起使用。有关编译特性的信息和支持的编译器列表,请参阅cmake-compile-features(7)手册。

这个版本的CMake的特点是:

  • c_std_90:编译模式至少是c90。
  • c_std_99:编译模式至少是c99。
  • c_std_11:编译模式至少是c11。
  • c_std_17:编译模式至少是c17。
  • c_std_23:编译模式至少是c23。
  • c_function_prototypes:功能原型,定义在ISO/IEC 9899:1990。
  • c_restrict:关键字restrict,如ISO/IEC 9899:1999中定义的。
  • c_static_assert:静态断言,定义在ISO/IEC 9899:2011。
  • c_variadic_macros:可变参数宏,在ISO/IEC 9899:1999中定义。

CMAKE_CUDA_KNOWN_FEATURES

3.17新版功能。

这个CMake版本的CUDA特性列表。

这个全局属性中列出的特性可能已知CUDA编译器可用。如果该特性在c++编译器中可用,它将被列在CMAKE_CUDA_COMPILE_FEATURES变量中。

这里列出的特性可以与target_compile_features()命令一起使用。有关编译特性的信息和支持的编译器列表,请参阅cmake-compile-features(7)手册。

这个版本的CMake的特点是:

  • cuda_std_03:编译模式至少是CUDA/ c++ 03。
  • cuda_std_11:编译模式至少是CUDA/ c++ 11。
  • cuda_std_14:编译模式至少是CUDA/ c++ 14。
  • cuda_std_17:编译模式至少是CUDA/ c++ 17。
  • cuda_std_20:编译模式至少是CUDA/ c++ 20。
  • cuda_std_23:编译模式至少是CUDA/ c++ 23。

CMAKE_CXX_KNOWN_FEATURES

3.1新版功能。

CMake版本的c++特性列表。

这个全局属性中列出的特性可能已知对c++编译器可用。如果该特性在c++编译器中可用,它将被列在CMAKE_CXX_COMPILE_FEATURES变量中。

这里列出的特性可以与target_compile_features()命令一起使用。有关编译特性的信息和支持的编译器列表,请参阅cmake-compile-features(7)手册。

下面列出了这个版本的CMake的已知特性。

指示c++标准支持的高级元特性

以下元特性表明了对相关语言标准的一般支持。它反映了编译器声明的语言支持,但并不一定意味着完全符合该标准。

  • cxx_std_98:编译模式至少是c++ 98。
  • cxx_std_11:编译模式至少是c++ 11。
  • cxx_std_14:编译器模式至少是c++ 14。
  • cxx_std_17:编译器模式至少是c++ 17。
  • cxx_std_20:编译器模式至少是c++ 20。
  • cxx_std_23:编译模式至少是c++ 23。

低级的独立编译特性

对于C++ 11和C++ 14,编译器有时会很慢地实现某些语言特征。CMake提供了一些单独的编译特性,以帮助项目确定特定特性是否可用。这些单独的特性现在不太相关,项目通常应该更喜欢使用高级元特性。对于C++ 17或更高版本,不提供单独的编译特性。

请参阅cmake compile features(7)手册,以进一步了解各个编译特性的用法。

C++ 98的个性化特征

  • cxx_template_template_parameters:模板模板参数,定义ISO/IEC 14882:1998。

Individual features from C++ 11

参见

CMAKE_ROLE

3.14新版功能。

告知当前运行的脚本处于何种模式。可以是以下几种值之一:

  • PROJECT:以项目模式运行(处理CMakeLists.txt文件)。
  • SCRIPT:以-P脚本模式运行。
  • FIND_PACKAGE:以–find-package模式运行。
  • CTEST:运行在CTest脚本模式。
  • CPACK:在CPack运行。

DEBUG_CONFIGURATIONS

指定要调试的配置。

该值必须是一个分号分隔的配置名称列表。目前这个属性只被target_link_libraries()命令使用。未来可能会定义其他用途。

此属性必须在项目的顶层,在第一次调用target_link_libraries()命令之前设置。如果列表中的任何项与项目的有效配置不匹配,则该行为未定义。

DISABLED_FEATURES

在CMake运行期间禁用的特性列表。

在CMake运行期间禁用的特性列表。默认情况下,它包含所有未找到的包的名称。这是通过_FOUND变量确定的。没有列出安静搜索的包。项目可以将自己的特性添加到此列表中。这个属性被FeatureSummary.cmake中的宏使用。

ECLIPSE_EXTRA_CPROJECT_CONTENTS

3.12新版功能。

要插入到生成的Eclipse cproject文件中的其他内容。

cproject文件定义了CDT特定的信息。一些第三方IDE是基于Eclipse的,添加了特定于该IDE的其他信息。通过此属性,可以将此附加内容添加到生成的项目中。期望它包含有效的XML。

请参见eclipse_extra_nature属性。

ECLIPSE_EXTRA_NATURES

要添加到生成的Eclipse项目文件中的属性列表。

Eclipse项目通过使用性质来指定语言插件。这个属性应该设置为一个性质的唯一标识符(它看起来像一个Java包名)。

请参见ECLIPSE_EXTRA_CPROJECT_CONTENTS属性。

ENABLED_FEATURES

在CMake运行期间启用的特性列表。

在CMake运行期间启用的特性列表。默认情况下,它包含找到的所有包的名称。这是通过_FOUND变量确定的。没有列出安静搜索的包。项目可以将自己的特性添加到此列表中。这个属性被FeatureSummary.cmake中的宏使用。

ENABLED_LANGUAGES

包含当前启用的语言列表的只读属性

设置为当前启用的语言列表。

FIND_LIBRARY_USE_LIB32_PATHS

3.7新版功能。

find_library()命令是否应该自动搜索lib32目录。

FIND_LIBRARY_USE_LIB32_PATHS是一个布尔值,指定在构建32位二进制文件时,find_library()命令是否应该在搜索路径中自动搜索名为lib的目录的lib32变体。

请参见CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX变量。

FIND_LIBRARY_USE_LIB64_PATHS

find_library()是否应该自动搜索lib64目录。

FIND_LIBRARY_USE_LIB64_PATHS是一个布尔值,指定在构建64位二进制文件时,find_library()命令是否应该在搜索路径中自动搜索名为lib的目录的lib64变体。

请参见CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX变量。

FIND_LIBRARY_USE_LIBX32_PATHS

3.9新版功能。

find_library()命令是否应该自动搜索libx32目录。

FIND_LIBRARY_USE_LIBX32_PATHS是一个布尔值,指定在构建x32-abi二进制文件时,find_library()命令是否应该在搜索路径中自动搜索名为lib的目录的libx32变体。

请参见CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX变量。

FIND_LIBRARY_USE_OPENBSD_VERSIONING

find_library()是否应该找到openbsd风格的共享库。

这个属性是一个布尔值,指定find_library()命令是否应该查找扩展名为openbsd风格的共享库:".so.< major >.< minor >"。该属性在OpenBSD上设置为true,在其他平台上设置为false。

GENERATOR_IS_MULTI_CONFIG

.9新版功能。

在多配置生成器上为true的只读属性。

当使用多配置生成器时为True,例如:

  • Ninja Multi-Config
  • Visual Studio Generators
  • Xcode

多配置生成器使用CMAKE_CONFIGURATION_TYPES作为配置集,而忽略CMAKE_BUILD_TYPE。

GLOBAL_DEPENDS_DEBUG_MODE

启用全局目标依赖关系图调试模式。

CMake在原生构建系统生成开始时自动分析全局目标间依赖关系图。此属性使其将分析的详细信息显示给stderr。

GLOBAL_DEPENDS_NO_CYCLES

禁止全局目标依赖图循环。

CMake在原生构建系统生成开始时自动分析全局目标间依赖关系图。如果依赖关系图包含一个不包含所有STATIC库目标的循环,则报告一个错误。这个属性告诉CMake完全禁止所有循环,即使是在静态库中。

IN_TRY_COMPILE

在尝试编译配置期间为true的只读属性。

在try_compile()或try_run()命令中构建项目时为True。

JOB_POOLS

仅用于Ninja :可用池列表。

池是一个命名的整数属性,它定义了可以由分配给池的规则启动的最大并发作业数。JOB_POOLS属性是一个分号分隔的对列表,使用语法NAME=integer(等号后面没有空格)。

例如:

set_property(GLOBAL PROPERTY JOB_POOLS two_jobs=2 ten_jobs=10)

定义的池可以通过设置CMAKE_JOB_POOL_COMPILE和CMAKE_JOB_POOL_LINK全局使用,或者通过设置目标属性JOB_POOL_COMPILE和JOB_POOL_LINK来使用每个目标。自定义命令和自定义目标可以使用选项JOB_POOL指定池。使用不是JOB_POOLS定义的池会导致忍者在构建时出错。

如果没有设置,此属性将使用CMAKE_JOB_POOLS变量的值。

CMake提供的用于单独交互使用(比如安装)的构建目标会自动放置在控制台池中

PACKAGES_FOUND

在CMake运行期间找到的包列表。

在CMake运行期间找到的包列表。一个包是否被找到是通过< NAME >_FOUND变量来确定的。

PACKAGES_NOT_FOUND

在CMake运行期间没有找到的包列表。

在CMake运行期间没有找到的包列表。一个包是否被找到是通过< NAME >_FOUND变量来确定的。

PREDEFINED_TARGETS_FOLDER

CMake自动添加的目标的文件夹名称。

如果没有设置,CMake使用"CMakePredefinedTargets"作为该属性的默认值。诸如INSTALL、PACKAGE和RUN_TESTS等目标将被组织到这个文件夹中。请参见FOLDER目标属性的文档。

REPORT_UNDEFINED_PROPERTIES

如果设置,则向此文件报告任何未定义的属性。

如果该属性被设置为一个文件名,那么当CMake运行时,它将报告任何被访问但没有定义到该属性指定的文件名中的属性或变量。

RULE_LAUNCH_COMPILE

为编译规则指定启动程序。

使用给定启动器命令行生成Makefile Generators和Ninja生成器前缀编译器命令。这是为了允许发射器拦截高粒度的构建问题。其他生成器忽略此属性,因为它们的底层构建系统没有提供挂钩来用启动程序包装单个命令。

RULE_LAUNCH_CUSTOM

为自定义规则指定启动程序。

Makefile Generators和Ninja生成器使用给定的启动器命令行作为自定义命令的前缀。这是为了允许发射器拦截高粒度的构建问题。其他生成器忽略此属性,因为它们的底层构建系统没有提供挂钩来用启动程序包装单个命令。

RULE_LAUNCH_LINK

指定链接规则的启动程序。

Makefile Generators和Ninja生成器前缀使用给定的启动器命令行链接和存档命令。这是为了允许发射器拦截高粒度的构建问题。其他生成器忽略此属性,因为它们的底层构建系统没有提供挂钩来用启动程序包装单个命令。

RULE_MESSAGES

指定是否为每个make规则报告一条消息。

此属性指定Makefile生成器是否应该添加描述每个构建规则所做工作的进度消息。如果未设置该属性,则默认为ON。将该属性设置为OFF以禁用细粒度消息并仅在每个目标完成时报告。这是为了让脚本构建避免详细报告的构建时间成本。如果CMAKE_RULE_MESSAGES缓存条目存在,它的值将初始化此属性的值。非生成文件生成器目前会忽略此属性。

TARGET_ARCHIVES_MAY_BE_SHARED_LIBS

如果共享库可以像归档文件一样命名,则设置。

在AIX上,共享库可以命名为“lib< name >.a”。此属性在此类平台上设置为true。

TARGET_MESSAGES

3.4新版功能。

指定是否报告每个目标的完成情况。

此属性指定Makefile Generators是否应该添加描述每个目标已经完成的进度消息。如果未设置该属性,则默认为ON。将该属性设置为OFF以禁用目标完成消息。

此选项的目的是,当很少或不需要做任何工作来更新构建树时,减少构建输出。

如果CMAKE_TARGET_MESSAGES缓存条目存在,它的值将初始化该属性的值。

Non-Makefile generators 目前会忽略此属性。

请参阅对应的属性RULE_MESSAGES,以禁用除目标完成消息以外的所有内容。

TARGET_SUPPORTS_SHARED_LIBS

目标平台是否支持共享库。

TARGET_SUPPORTS_SHARED_LIBS是一个布尔值,指定目标平台是否支持共享库。基本上所有当前通用的通用操作系统都是这样做的,例外情况通常是没有或特殊操作系统的嵌入式系统。

USE_FOLDERS

使用FOLDER目标属性将目标组织到文件夹中。

如果没有设置,CMake默认将此属性视为OFF。CMake生成器能够将文件夹组织成一个层次结构,使用FOLDER目标属性的值来命名这些文件夹。请参见FOLDER目标属性的文档。

XCODE_EMIT_EFFECTIVE_PLATFORM_NAME

3.8新版功能。

通过Xcode生成器控制effecve_platform_name的发射。

用多个sdk构建同一个目标时需要用到它。一个常见的用例是并行使用iphoneos和iphone模拟器sdk。

当Xcode生成器发出effecve_platform_name变量时,有三种不同的状态:

如果设置为ON,它将始终被触发

如果设置为OFF,则永远不会触发

如果未设置(默认),它将仅在项目配置为嵌入式Xcode SDK时发出,如iOS, tvOS, watchOS或任何模拟器。

注意,当这个行为在生成的Xcode项目中启用时,effecve_platform_name变量会泄漏到生成器表达式中,比如TARGET_FILE,并且会使这些表达式几乎不可用。

你可能感兴趣的:(C++)