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