Spec-Zone.ru › CMake

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.txt
include(CMakeDependentOption)

cmake_dependent_option(USE_SSL_GNUTLS "Use GnuTLS for SSL" ON USE_SSL OFF)

Пример: включение и отключение зависимого параметра

В продолжение предыдущего примера показано, как модуль позволяет задавать параметры, настраиваемые пользователем в зависимости от условия на этапе настройки:

CMakeLists.txt
include(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.txt
include(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.txt
include(CMakeDependentOption)

cmake_dependent_option(USE_FOO "Use Foo" ON "USE_A AND (USE_B OR USE_C)" OFF)

В другом примере показано, как доступность параметра может зависеть от целевой системы:

CMakeLists.txt
include(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API