CMakeDependentOption
Этот модуль предоставляет команду для определения логических параметров, доступность и значения по умолчанию которых зависят от заданных условий или других параметров. Это помогает поддерживать лаконичный интерфейс настройки, отображая только параметры, актуальные для текущих настроек.
Загрузите этот модуль в CMake с помощью:
include(CMakeDependentOption)
Команды
Этот модуль предоставляет следующую команду:
-
cmake_dependent_option -
Предоставляет логический параметр, зависящий от набора условий:
cmake_dependent_option(<variable> <help> <value> <condition> <else-value>)
Эта команда создает логический
<variable>и делает его доступным пользователю в графическом интерфейсе (например, вcmake-gui(1)илиccmake(1)), если набор условий вычисляется как логическое значение true.Аргументы:
-
<variable> -
Имя переменной, в которой хранится значение параметра.
-
<help> -
Краткое описание параметра. Обычно эта строка представляет собой короткую текстовую фразу и отображается в графическом интерфейсе.
-
<value> -
Логическое значение для
<variable>, когда<condition>вычисляется как логическое значение true. -
<condition> -
Задает условия, определяющие, устанавливается ли
<variable>и отображается ли он в графическом интерфейсе.- Если
<condition>вычисляется как логическое значение false, параметр скрывается от пользователя в графическом интерфейсе, а локальной переменной<variable>присваивается значение<else-value>. - Если
<condition>вычисляется как логическое значение true, создается логическая переменная кэша с именем<variable>и значением по умолчанию<value>, а параметр отображается в графическом интерфейсе, позволяя пользователю включить или отключить его. - Если
<condition>при последующем запуске настройки вычисляется как логическое значение false, параметр скрывается от пользователя в графическом интерфейсе, а тип<variable>изменяется на внутреннюю переменную кэша. В этом случае локальной переменной с тем же именем присваивается значение<else-value>. - Если
<condition>снова становится равным true при последующих запусках настройки, ранее заданное пользователем значение сохраняется.
Аргумент
<condition>может быть:- Одним условием (например, именем переменной).
- списком условий, разделенных точкой с запятой.
-
Добавлено в версии 3.22: Полным синтаксисом условий, используемым в предложении
if(<condition>). См. политикуCMP0127. Это позволяет использовать полный синтаксис условий (например, группировать условия с помощью скобок и т. п.).
- Если
-
<else-value> -
Значение, присваиваемое локальной переменной с именем
<variable>, когда<condition>вычисляется как логическое значение false.
В режиме проекта CMake создаются логические переменные кэша, как описано выше. В режиме скрипта CMake вместо этого устанавливаются логические переменные.
-
Примеры
Пример: базовое использование
Использование этого модуля в проекте для условной установки параметра:
CMakeLists.txtinclude(CMakeDependentOption) cmake_dependent_option(USE_SSL_GNUTLS "Use GnuTLS for SSL" ON USE_SSL OFF)
Пример: включение и отключение зависимого параметра
В продолжение предыдущего примера показано, как модуль позволяет задавать параметры, настраиваемые пользователем в зависимости от условия на этапе настройки:
CMakeLists.txtinclude(CMakeDependentOption)
option(USE_SSL "Enable SSL in the project" OFF)
cmake_dependent_option(USE_SSL_GNUTLS "Use GnuTLS for SSL" ON USE_SSL OFF)
message(STATUS "USE_SSL: ${USE_SSL}")
message(STATUS "USE_SSL_GNUTLS: ${USE_SSL_GNUTLS}")
При первом запуске настройки логической переменной кэша USE_SSL присваивается значение OFF, а локальной переменной USE_SSL_GNUTLS — значение OFF:
$ cmake -B build-dir -- USE_SSL: OFF -- USE_SSL_GNUTLS: OFF
При запуске CMake с USE_SSL=ON обеим логическим переменным кэша — USE_SSL и USE_SSL_GNUTLS — присваивается значение ON:
$ cmake -B build-dir -D USE_SSL=ON -- USE_SSL: ON -- USE_SSL_GNUTLS: ON
При последующем запуске настройки с USE_SSL=OFF значение USE_SSL_GNUTLS также изменяется соответствующим образом. Однако его значение сохраняется во внутреннем кэше, хотя локально оно переопределяется:
$ cmake -B build-dir -D USE_SSL=OFF -- USE_SSL: OFF -- USE_SSL_GNUTLS: OFF
Пример: список условий, разделенных точкой с запятой
Аргумент <condition> также может представлять собой список условий, разделенных точкой с запятой. В следующем примере, если переменная USE_BAR имеет значение ON, а переменная USE_ZOT — OFF, параметр USE_FOO становится доступным, и ему по умолчанию присваивается значение ON. В противном случае переменной USE_FOO присваивается значение OFF, а сам параметр скрывается от пользователя.
Если значения USE_BAR или USE_ZOT изменятся при последующих запусках настройки, предыдущее значение USE_FOO сохранится, чтобы при повторном появлении параметра он сохранял последнее заданное значение.
CMakeLists.txtinclude(CMakeDependentOption) cmake_dependent_option(USE_FOO "Use Foo" ON "USE_BAR;NOT USE_ZOT" OFF)
Пример: полный синтаксис условий
Начиная с CMake 3.22, cmake_dependent_option() поддерживает полный синтаксис условий.
В следующем примере, если условие вычисляется как true, параметр USE_FOO становится доступным, и ему присваивается значение ON. В противном случае ему присваивается значение OFF, и он скрывается в графическом интерфейсе. Значение USE_FOO сохраняется при последующих запусках настройки, как и в предыдущем примере.
CMakeLists.txtinclude(CMakeDependentOption) cmake_dependent_option(USE_FOO "Use Foo" ON "USE_A AND (USE_B OR USE_C)" OFF)
В другом примере показано, как доступность параметра может зависеть от целевой системы:
CMakeLists.txtinclude(CMakeDependentOption) cmake_dependent_option( ENABLE_FOO "Enable feature Foo (this option is available when building for Windows)" ON [[CMAKE_SYSTEM_NAME STREQUAL "Windows"]] OFF )
См. также
- Команда
option()предоставляет логический параметр, который пользователь может при необходимости выбрать.
© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/module/CMakeDependentOption.html