CMakeDependentOption¶
此模块提供了一个命令,用于定义布尔选项,其可用性和默认值取决于指定的条件或其他选项。这有助于通过仅显示与当前设置相关的选项来维护整洁的配置界面。
在 CMake 项目中加载此模块,使用
include(CMakeDependentOption)
命令¶
此模块提供以下命令
- cmake_dependent_option¶
提供一个依赖于一组条件的布尔选项
cmake_dependent_option(<variable> <help> <value> <condition> <else-value>)
此命令创建一个布尔
<variable>
并使其在 GUI(例如cmake-gui(1)
或ccmake(1)
)中对用户可用,如果一组条件评估为布尔真。参数为
<variable>
存储选项值的变量名称。
<help>
选项的简要描述。此字符串通常是一行短文本,并在 GUI 中显示。
<value>
当
<condition>
评估为布尔真时,<variable>
的布尔值。<condition>
指定确定
<variable>
是否设置并在 GUI 中可见的条件。如果
<condition>
评估为布尔假,选项将在 GUI 中对用户隐藏,并且局部变量<variable>
将设置为<else-value>
。如果
<condition>
评估为布尔真,将创建一个名为<variable>
的布尔缓存变量,其默认值为<value>
,并且选项将在 GUI 中显示,允许用户启用或禁用它。如果
<condition>
随后评估为布尔假(在连续配置运行中),选项将在 GUI 中对用户隐藏,并且<variable>
类型将更改为内部缓存变量。在这种情况下,同名的局部变量将设置为<else-value>
。如果
<condition>
在连续配置运行中再次变为真,则用户的先前设置值将保留。
<condition>
参数可以是单个条件(例如变量名)。
由 分号分隔的多个条件列表。
<else-value>
当
<condition>
评估为布尔假时,分配给名为<variable>
的局部变量的值。
示例¶
示例:基本用法¶
在项目中使用此模块有条件地设置选项
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()
支持完整条件语法。
在下面的示例中,如果条件评估为真,则选项 USE_FOO
可用并设置为 ON。否则,它将设置为 OFF 并在 GUI 中隐藏。与前一个示例类似,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()
命令提供了一个用户可以选择的布尔选项。