FeatureSummary¶
此模块提供了用于生成已启用/禁用功能的摘要的命令。
使用 CMake 加载此模块
include(FeatureSummary)
此模块提供的命令可用于为构建树生成已启用和已禁用包和/或功能的摘要,例如:
-- The following features have been enabled:
* Example, usage example
-- The following OPTIONAL packages have been found:
* LibXml2 (required version >= 2.4), XML library, <http://xmlsoft.org>
Enables HTML-import in MyWordProcessor
Enables odt-export in MyWordProcessor
* PNG, image library, <http://www.libpng.org/pub/png/>
Enables saving screenshots
-- The following OPTIONAL packages have not been found:
* Lua, the Lua scripting language, <https://lua.ac.cn>
Enables macros in MyWordProcessor
* OpenGL, Open Graphics Library
全局属性¶
此模块使用的全局属性如下:
- FeatureSummary_PKG_TYPES¶
版本 3.8 新增。
此全局属性定义了一个由
FeatureSummary模块使用的包类型组成的分号分隔列表。此列表中的顺序很重要,列表中的第一个包类型重要性最低,而最后一个最重要。包的类型只能更改为重要性更高的类型。
默认包类型为
RUNTIME、OPTIONAL、RECOMMENDED和REQUIRED,其重要性排名为RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED。
- FeatureSummary_REQUIRED_PKG_TYPES¶
版本 3.8 新增。
此全局属性定义了一个被认为是必需的包类型的分号分隔列表。
如果未找到这些类别中的一个或多个包,当调用带有
FATAL_ON_MISSING_REQUIRED_PACKAGES选项的FeatureSummary命令时,CMake 将中止。此全局属性的默认值为
REQUIRED。
- FeatureSummary_DEFAULT_PKG_TYPE¶
版本 3.8 新增。
此全局属性定义了默认包类型。
当调用
FeatureSummary命令,并且用户未显式设置某些包的类型时,其类型将设置为此属性的值。此值必须是
FeatureSummary_PKG_TYPES全局属性中定义的类型之一。此全局属性的默认值为
OPTIONAL。
- FeatureSummary_<TYPE>_DESCRIPTION¶
版本 3.9 中添加。
此全局属性可以为每个包类型
<TYPE>定义一个字符串,该字符串将用于feature_summary()命令的输出标题。例如:The following <FeatureSummary_<TYPE>_DESCRIPTION> have been found:
如果未设置,则使用默认字符串
<TYPE> packages。
命令¶
本模块提供以下命令
打印功能摘要¶
- feature_summary¶
打印有关项目已启用或禁用包和功能的信息。
feature_summary( WHAT (ALL | PACKAGES_FOUND | PACKAGES_NOT_FOUND | <TYPE>_PACKAGES_FOUND | <TYPE>_PACKAGES_NOT_FOUND | ENABLED_FEATURES | DISABLED_FEATURES) [FILENAME <file>] [APPEND] [VAR <variable-name>] [INCLUDE_QUIET_PACKAGES] [FATAL_ON_MISSING_REQUIRED_PACKAGES] [DESCRIPTION <description> | DEFAULT_DESCRIPTION] [QUIET_ON_EMPTY] )
此命令可用于打印有关项目已启用或禁用包和功能的信息。默认情况下,只打印功能/包的名称以及指定时所需的版本。使用
set_package_properties()添加更多有用的信息,例如相应包的主页 URL 或其在项目中的用途。参数为
WHAT这是唯一的强制选项。它指定将打印哪些信息。
ALL打印所有内容。
ENABLED_FEATURES所有已启用功能的列表。
DISABLED_FEATURES所有已禁用功能的列表。
PACKAGES_FOUND已找到的所有包的列表。
PACKAGES_NOT_FOUND未找到的所有包的列表。
对于
FeatureSummary_PKG_TYPES全局属性定义的每种包类型<TYPE>,还可以使用以下信息:<TYPE>_PACKAGES_FOUND仅包含类型为
<TYPE>的已找到包的列表。<TYPE>_PACKAGES_NOT_FOUND仅包含类型为
<TYPE>的未找到包的列表。
版本 3.1 中已更改:
WHAT选项现在是多值关键字,因此可以组合这些值(除了ALL值),以便自定义输出。例如:feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES)
FILENAME <file>如果提供了此选项,则信息将打印到此文件而不是终端。相对
<file>路径被解释为相对于当前源目录(即CMAKE_CURRENT_SOURCE_DIR)。APPEND如果提供了此选项,输出将附加到
FILENAME选项提供的<file>,否则如果文件已存在,则会被覆盖。VAR <variable-name>如果提供了此选项,信息将存储在指定的变量
<variable-name>中,而不是打印到终端。INCLUDE_QUIET_PACKAGES如果提供了此选项,则也会列出使用
find_package(... QUIET)搜索的包。默认情况下它们会被跳过。FATAL_ON_MISSING_REQUIRED_PACKAGES如果提供了此选项,并且未找到在
FeatureSummary_REQUIRED_PKG_TYPES全局属性中列出的包类型之一的包,CMake 将中止并显示致命错误。DESCRIPTION <description>将在实际内容上方打印的描述或标题。如果没有此选项,并且只请求了一种包类型,则不会打印标题,除非使用此选项或
DEFAULT_DESCRIPTION选项明确设置了自定义字符串,后者为请求的类型输出默认标题。DEFAULT_DESCRIPTION版本 3.9 中添加。
与可自定义的
DESCRIPTION <description>相对,这是将在内容上方打印的默认描述或标题。QUIET_ON_EMPTY版本 3.8 新增。
如果提供了此选项,当只请求了一种包类型,并且没有找到属于该类别的包时,则不会打印(包括
DESCRIPTION)任何输出,也不会将其添加到FILENAME或VAR变量中。
包属性¶
- set_package_properties¶
设置包属性。
set_package_properties( <PackageName> PROPERTIES [URL <url>] [DESCRIPTION <description>] [TYPE (RUNTIME|OPTIONAL|RECOMMENDED|REQUIRED)] [PURPOSE <purpose>] )
使用此命令配置和提供有关名为
<PackageName>的包的信息,然后可以使用feature_summary()命令显示该信息。此命令可以直接在相应的Find 模块中调用,或在调用find_package()调用后,在项目中使用该模块时调用。可以设置信息的特征在调用find_package()命令后自动确定。参数为
<PackageName>包的名称。例如,在
find_package(<PackageName>)参数中指定的名称。PROPERTIES指定要设置的属性。
URL <url>这应该是包的主页,或类似内容。理想情况下,这应直接在Find 模块中设置。
DESCRIPTION <description>关于该包是什么的简短描述,最多一句。理想情况下,这应直接在Find 模块中设置。
TYPE <type>使用项目对该包的依赖类型。
默认
<type>为OPTIONAL。在这种情况下,这是一个项目在构建时可用时可以使用,但即使没有它项目也能正常工作的包。RECOMMENDED包类型与OPTIONAL类似,即如果包不存在,项目仍会构建,但结果二进制文件的功能将受到严重限制。如果REQUIRED包在构建时不可用,项目可能甚至无法构建。这可以与feature_summary(FATAL_ON_MISSING_REQUIRED_PACKAGES)命令选项结合使用。最后,
RUNTIME包是一个在构建过程中实际上不使用,但结果二进制文件运行必需的包。因此,如果此类包缺失,项目仍然可以构建,但之后可能无法正常工作。如果对同一包使用不同的
TYPE调用多次set_package_properties(),则TYPE仅更改为更高级别的 TYPE(RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED),较低级别的 TYPE 将被忽略。TYPE属性是项目特定的,因此不能由Find 模块设置,而必须在项目中设置。接受的类型可以通过设置
FeatureSummary_PKG_TYPES全局属性来更改。PURPOSE <purpose>这描述了该包在项目中启用了哪些功能,即它告诉用户在结果二进制文件中获得了什么功能。如果多次为包调用
set_package_properties(),所有PURPOSE属性都将被添加到项目包的目的列表中。与TYPE属性一样,PURPOSE属性也是项目特定的,因此不能由Find 模块设置,而必须在项目中设置。
添加功能信息¶
- add_feature_info¶
添加功能信息。
add_feature_info(<name> <condition> <description>)
使用此命令添加有关由给定
<name>标识的功能的信息。参数为
<name>要添加的功能的标识名称。
<condition>指定决定该功能是否启用或禁用的条件。
参数
<condition>可以是:单个条件(例如变量名)。
版本 3.8 中已添加: 多个条件的分号分隔列表。
<description>描述该功能的文本。可以使用
feature_summary()命令为ENABLED_FEATURES和DISABLED_FEATURES分别显示此信息。
已弃用的命令¶
为向后兼容以前的 CMake 版本,提供了以下旧版和已弃用的命令:
- set_package_info¶
自版本 3.8 起已弃用: 请改用
set_package_properties()和add_feature_info()命令。设置指定包的信息,然后可以通过
feature_summary()显示。set_package_info(<PackageName> <description> [<url> [<purpose>]])
<PackageName>包的名称。
<description>包的简短描述。
<url>包的主页。
<purpose>包的用途。
此命令可以直接在Find 模块中调用,或在调用
find_package()命令后,在使用了FeatureSummary模块的项目中调用。可以设置信息的特征由find_package()命令自动添加。
- set_feature_info¶
自版本 3.8 起已弃用。
设置包的功能信息。
set_feature_info(<name> <description> [<url>])
功能与...相同:
set_package_info(<name> <description> [<url>])
- print_enabled_features¶
自版本 3.8 起已弃用。
打印已启用功能。
print_enabled_features()功能与...相同:
feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:")
- print_disabled_features¶
自版本 3.8 起已弃用。
打印已禁用功能。
print_disabled_features()功能与...相同:
feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:")
示例¶
示例:将功能摘要附加到文件¶
在下面的示例中,功能摘要输出将被附加到指定文件,而不是打印到终端。
include(FeatureSummary)
feature_summary(WHAT ALL FILENAME ${CMAKE_BINARY_DIR}/all.log APPEND)
示例:将功能摘要存储在变量中¶
在下面的示例中,已启用功能的特征摘要被存储在指定的变量 enabledFeaturesText 中,包括 QUIET 包。
include(FeatureSummary)
feature_summary(
WHAT ENABLED_FEATURES
INCLUDE_QUIET_PACKAGES
DESCRIPTION "Enabled Features:"
VAR enabledFeaturesText
)
message(STATUS "${enabledFeaturesText}")
示例:添加自定义包类型¶
在下面的示例中,添加了一个自定义包类型,并且仅打印非空类别。
include(FeatureSummary)
set_property(GLOBAL APPEND PROPERTY FeatureSummary_PKG_TYPES BUILD)
find_package(FOO)
set_package_properties(FOO PROPERTIES TYPE BUILD)
feature_summary(
WHAT BUILD_PACKAGES_FOUND
DESCRIPTION "Build tools found:"
QUIET_ON_EMPTY
)
feature_summary(
WHAT BUILD_PACKAGES_NOT_FOUND
DESCRIPTION "Build tools not found:"
QUIET_ON_EMPTY
)
示例:设置包信息¶
为包设置信息的示例。
include(FeatureSummary)
find_package(LibXml2)
set_package_properties(
LibXml2
PROPERTIES
DESCRIPTION "XML library"
URL "http://xmlsoft.org"
)
# or
set_package_properties(
LibXml2
PROPERTIES
TYPE RECOMMENDED
PURPOSE "Enables HTML-import in MyWordProcessor"
)
# or
set_package_properties(
LibXml2
PROPERTIES
TYPE OPTIONAL
PURPOSE "Enables odt-export in MyWordProcessor"
)
find_package(DBUS)
set_package_properties(
DBUS
PROPERTIES
TYPE RUNTIME
PURPOSE "Necessary to disable the screensaver during a presentation"
)
示例:打印功能摘要¶
在下面的示例中,此模块用于在配置结束时输出功能摘要。如果找不到任何必需的包,则在配置阶段结束时,处理将中止并显示错误消息。
cmake_minimum_required(VERSION 3.15)
project(Example)
add_library(example example.c)
include(FeatureSummary)
find_package(CURL)
set_package_properties(CURL PROPERTIES TYPE REQUIRED)
target_link_libraries(example PRIVATE CURL::libcurl)
find_package(LibXml2 QUIET)
set_package_properties(LibXml2 PROPERTIES TYPE RECOMMENDED)
if(LibXml2_FOUND)
target_link_libraries(example PRIVATE LibXml2::LibXml2)
endif()
feature_summary(
WHAT ALL
INCLUDE_QUIET_PACKAGES
DESCRIPTION "Feature summary:"
FATAL_ON_MISSING_REQUIRED_PACKAGES
)
示例:设置功能信息¶
设置功能的示例信息。
include(FeatureSummary)
option(WITH_FOO "Help for foo" ON)
add_feature_info(Foo WITH_FOO "this feature provides very cool stuff")
基于条件列表设置功能信息的示例。
include(FeatureSummary)
option(WITH_FOO "Help for foo" ON)
option(WITH_BAR "Help for bar" OFF)
add_feature_info(
FooBar
"WITH_FOO;NOT WITH_BAR"
"this feature is enabled when WITH_FOO is ON and WITH_BAR turned OFF"
)
在下一个示例中,功能信息根据完整的条件语法进行设置。与分号分隔的条件列表不同,这允许将完整的条件语法作为 if 子句参数。
include(FeatureSummary)
option(WITH_FOO "Help for foo" ON)
option(WITH_BAR "Help for bar" ON)
option(WITH_BAZ "Help for baz" OFF)
add_feature_info(
FooBarBaz
"WITH_FOO AND (WITH_BAR OR WITH_BAZ)"
"this feature is enabled when the entire condition is true"
)