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
Глобальное свойство 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>
За исключением значения
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.Глобальное свойство
FeatureSummary_DEFAULT_PKG_TYPEможно изменить, чтобы изменить тип пакета по умолчанию, присваиваемый, когда он не задан пользователем явно.Если используется параметр
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_package(). Функции, для которых может быть установлена информация, добавляются автоматически командой find_package().
-
URL <url> -
Здесь должна быть домашняя страница пакета или что-то подобное. В идеале это уже задано непосредственно в модуле поиска.
-
DESCRIPTION <description> -
Краткое описание пакета (максимум одно предложение). В идеале это уже задано непосредственно в модуле поиска.
-
TYPE <type> -
Тип зависимости проекта от этого пакета. По умолчанию —
OPTIONAL. В этом случае это пакет, который может использоваться проектом, когда он доступен во время сборки, но он также может работать и без него.RECOMMENDEDаналогиченOPTIONAL, т.е. проект будет собираться, если пакет отсутствует, но функциональность результирующих библиотек будет сильно ограничена. Если пакетREQUIREDнедоступен на этапе сборки, проект может вообще не собраться. Это можно комбинировать с аргументомFATAL_ON_MISSING_REQUIRED_PACKAGESдляfeature_summary(). Наконец, пакетRUNTIME— это пакет, который вообще не используется во время сборки, но который необходим для работы результирующих библиотек. Так что, если такой пакет отсутствует, проект всё ещё может быть собран, но он может не работать позже. Еслиset_package_properties()вызывается несколько раз для одного пакета с разными типами,TYPEизменяется только на более высокие типы (RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED), более низкие типы игнорируются. СвойствоTYPEспецифично для проекта, поэтому его нельзя задать в модуле поиска, но необходимо задать в проекте. Допустимые типы могут быть изменены путём установки глобального свойстваFeatureSummary_PKG_TYPES. -
PURPOSE <purpose> -
Это описывает, какие функции этот пакет включает в проект, т.е. сообщает пользователю, какую функциональность он получит в результирующих бинарных файлах. Если set_package_properties() вызывается несколько раз для одного пакета, все свойства PURPOSE добавляются в список назначений пакета в проекте. Как и свойство TYPE, свойство PURPOSE также специфично для проекта, поэтому его нельзя задать в модуле поиска, но необходимо задать в проекте.
Пример установки информации о пакете:
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соответственно.Пример установки информации о функции:
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–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.17/module/FeatureSummary.html