FeatureSummary
Функции для генерации сводки включенных/выключенных функций.
Эти функции могут использоваться для генерации сводки включённых и выключенных пакетов и/или функций для дерева сборки, например:
-- The following OPTIONAL packages have been found: LibXml2 (required version >= 2.4), XML processing lib, <http://xmlsoft.org> * Enables HTML-import in MyWordProcessor * Enables odt-export in MyWordProcessor PNG, A PNG image library., <http://www.libpng.org/pub/png/> * Enables saving screenshots -- The following OPTIONAL packages have not been found: Lua51, The Lua scripting language., <http://www.lua.org> * Enables macros in MyWordProcessor Foo, Foo provides cool stuff.
Глобальные свойства
-
FeatureSummary_PKG_TYPES
Глобальное свойство FeatureSummary_PKG_TYPES определяет тип пакетов, используемых FeatureSummary.
Порядок в этом списке важен: первый тип пакета в списке — наименее важный, последний — самый важный. Тип пакета может быть изменён только на более высокий тип.
Типовыми типами пакетов являются , RUNTIME, OPTIONAL, RECOMMENDED и REQUIRED, и их важность — RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED.
-
FeatureSummary_REQUIRED_PKG_TYPES
Глобальное свойство FeatureSummary_REQUIRED_PKG_TYPES определяет, какие типы пакетов требуются.
Если один или несколько пакетов в этих категориях не найдены, CMake прервёт выполнение при вызове feature_summary() с включённым параметром 'FATAL_ON_MISSING_REQUIRED_PACKAGES'.
Значение по умолчанию для этого глобального свойства — REQUIRED.
-
FeatureSummary_DEFAULT_PKG_TYPE
Глобальное свойство FeatureSummary_DEFAULT_PKG_TYPE определяет тип пакета по умолчанию. При вызове feature_summary(), если пользователь не задал тип пакета явно, пакет будет назначен в эту категорию.
Это значение должно быть одним из типов, определённых в глобальном свойстве FeatureSummary_PKG_TYPES, если тип пакета не установлен для всех пакетов.
Значение по умолчанию для этого глобального свойства — OPTIONAL.
-
FeatureSummary_<TYPE>_DESCRIPTION
Новая версия 3.9.
Глобальное свойство FeatureSummary_<TYPE>_DESCRIPTION можно определить для каждого типа, чтобы заменить имя типа указанной строкой, когда тип пакета используется в строке вывода.
Если не задано, используется строка "<TYPE> пакетов".
Функции
-
feature_summary -
feature_summary( [FILENAME <file>] [APPEND] [VAR <variable_name>] [INCLUDE_QUIET_PACKAGES] [FATAL_ON_MISSING_REQUIRED_PACKAGES] [DESCRIPTION "<description>" | DEFAULT_DESCRIPTION] [QUIET_ON_EMPTY] WHAT (ALL | PACKAGES_FOUND | PACKAGES_NOT_FOUND | <TYPE>_PACKAGES_FOUND | <TYPE>_PACKAGES_NOT_FOUND | ENABLED_FEATURES | DISABLED_FEATURES) )Макрос
feature_summary()может использоваться для вывода информации о включённых или выключенных пакетах или функциях проекта. По умолчанию выводятся только имена функций/пакетов и их требуемая версия, если она была указана. Используйтеset_package_properties()для добавления дополнительной полезной информации, например, URL загрузки соответствующего пакета или его назначение в проекте.Параметр
WHAT— единственный обязательный параметр. Здесь вы указываете, какая информация будет выведена:-
ALL -
вывести всё
-
ENABLED_FEATURES -
список всех включённых функций
-
DISABLED_FEATURES -
список всех выключенных функций
-
PACKAGES_FOUND -
список всех найденных пакетов
-
PACKAGES_NOT_FOUND -
список всех ненайденных пакетов
Для каждого типа пакета
<TYPE>, определённого глобальным свойствомFeatureSummary_PKG_TYPES, также можно использовать:-
<TYPE>_PACKAGES_FOUND -
только те пакеты, которые были найдены, и которые имеют тип <TYPE>
-
<TYPE>_PACKAGES_NOT_FOUND -
только те пакеты, которые не были найдены, и которые имеют тип <TYPE>
Изменено в версии 3.1: С исключением значения
ALL, эти значения могут быть объединены для настройки вывода. Например:feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES)
Если задан
FILENAME, информация выводится в этот файл. Если используетсяAPPEND, информация добавляется в конец файла, иначе файл перезаписывается, если он уже существует. Если используется опция VAR, информация «выводится» в указанную переменную. ЕслиFILENAMEне используется, информация выводится на терминал. С помощью параметраDESCRIPTIONможно задать описание или заголовок, который будет выведен над фактическим содержимым. Если запрошен только один тип пакета, заголовок не выводится, если не задан явно с помощьюDESCRIPTION(пользовательская строка) илиDEFAULT_DESCRIPTION(заголовок по умолчанию для запрошенного типа). Если заданINCLUDE_QUIET_PACKAGES, также будут перечислены пакеты, которые были просмотрены сfind_package(... QUIET). По умолчанию они пропускаются. Если заданFATAL_ON_MISSING_REQUIRED_PACKAGES, CMake прервёт выполнение, если пакет, помеченный как один из типов пакетов, перечисленных в глобальном свойствеFeatureSummary_REQUIRED_PKG_TYPES, не найден. Значение по умолчанию для глобального свойстваFeatureSummary_REQUIRED_PKG_TYPES—REQUIRED.Новая версия 3.9: Параметр
DEFAULT_DESCRIPTION.Глобальное свойство
FeatureSummary_DEFAULT_PKG_TYPEможно изменить для изменения типа пакета по умолчанию, назначаемого при отсутствии явного задания пользователем.Новая версия 3.8: Если используется параметр
QUIET_ON_EMPTY, если запрошен только один тип пакета и пакеты, относящиеся к этой категории, не найдены, то не выводится никакой вывод (включаяDESCRIPTION) и ничего не добавляется в переменнуюVAR.Пример 1, добавить всё в файл:
include(FeatureSummary) feature_summary(WHAT ALL FILENAME ${CMAKE_BINARY_DIR}/all.log APPEND)Пример 2, вывести включённые функции в переменную enabledFeaturesText, включая пакеты QUIET:
include(FeatureSummary) feature_summary(WHAT ENABLED_FEATURES INCLUDE_QUIET_PACKAGES DESCRIPTION "Enabled Features:" VAR enabledFeaturesText) message(STATUS "${enabledFeaturesText}")Пример 3, изменить типы пакетов по умолчанию и вывести только непустые категории:
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) -
-
set_package_properties -
set_package_properties(<name> PROPERTIES [ URL <url> ] [ DESCRIPTION <description> ] [ TYPE (RUNTIME|OPTIONAL|RECOMMENDED|REQUIRED) ] [ PURPOSE <purpose> ] )Используйте этот макрос для настройки информации о названном пакете, которую затем можно отобразить с помощью FEATURE_SUMMARY(). Это можно сделать либо непосредственно в модуле Find, либо в проекте, использующем модуль после вызова find_package(). Функции, для которых можно задать информацию, автоматически добавляются командой find_package().
-
URL <url> -
Это должна быть домашняя страница пакета или что-то подобное. В идеале это уже установлено непосредственно в модуле Find.
-
DESCRIPTION <description> -
Краткое описание пакета, не более одного предложения. В идеале это уже установлено непосредственно в модуле Find.
-
TYPE <type> -
Тип зависимости проекта от данного пакета. По умолчанию —
OPTIONAL. В этом случае это пакет, который может использоваться проектом при наличии во время сборки, но он также работает и без него.RECOMMENDEDаналогиченOPTIONAL, т. е. проект будет скомпилирован, если пакет отсутствует, но функциональность получившихся библиотек будет сильно ограничена. Если пакет типаREQUIREDнедоступен во время сборки, проект может даже не скомпилироваться. Это можно комбинировать с аргументомFATAL_ON_MISSING_REQUIRED_PACKAGESдляfeature_summary(). Наконец, пакет типаRUNTIME— это пакет, который вообще не используется во время сборки, но требуется для фактического запуска получившихся библиотек. Таким образом, если такой пакет отсутствует, проект всё ещё может быть скомпилирован, но он может не работать позже. Еслиset_package_properties()вызывается несколько раз для одного и того же пакета с различными типами,TYPEизменяется только на более высокие типы (RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED), типы ниже игнорируются. СвойствоTYPEспецифично для проекта, поэтому его нельзя установить в модуле Find, а необходимо установить в проекте. Допустимые типы можно изменить, установив глобальное свойствоFeatureSummary_PKG_TYPES. -
PURPOSE <purpose> -
Это описывает, какие функции этот пакет включает в проект, т. е. сообщает пользователю о функциональности, которую он получит в получившихся бинарных файлах. Если set_package_properties() вызывается несколько раз для пакета, все свойства PURPOSE добавляются в список целей пакета в проекте. Как и свойство TYPE, свойство PURPOSE специфично для проекта, поэтому его нельзя установить в модуле Find, а необходимо установить в проекте.
Пример настройки информации о пакете:
find_package(LibXml2) set_package_properties(LibXml2 PROPERTIES DESCRIPTION "A XML processing 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") -
-
add_feature_info -
add_feature_info(<name> <enabled> <description>)
Используйте этот макрос для добавления информации о функции с заданным
<name>.<enabled>содержит информацию о том, включена ли эта функция или нет. Это может быть переменная или список условий.<description>— это текст, описывающий функцию. Информацию можно отобразить с помощьюfeature_summary()дляENABLED_FEATURESиDISABLED_FEATURESсоответственно.Изменено в версии 3.8:
<enabled>может быть списком условий.Пример настройки информации о функции:
option(WITH_FOO "Help for foo" ON) add_feature_info(Foo WITH_FOO "The Foo feature provides very cool stuff.")
Устаревшие макросы
Следующие макросы предоставлены для совместимости с предыдущими версиями CMake:
-
set_package_info -
set_package_info(<name> <description> [ <url> [<purpose>] ])
Используйте эту макрокоманду для настройки информации о заданном пакете, которая затем может быть отображена с помощью
feature_summary(). Это можно сделать непосредственно в модуле поиска или в проекте, использующем этот модуль после вызоваfind_package(). Функциональные возможности, для которых можно задать информацию, автоматически добавляются командойfind_package().
-
set_feature_info -
set_feature_info(<name> <description> [<url>])
Выполняет то же, что и:
set_package_info(<name> <description> <url>)
-
print_enabled_features -
print_enabled_features()
Выполняет то же, что и
feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:")
-
print_disabled_features -
print_disabled_features()
Выполняет то же, что и
feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:")
© 2000–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.22/module/FeatureSummary.html