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>的局部变量的值。
在 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() 支持完整的条件语法。
在下面的示例中,如果条件求值为真,则选项 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()命令,用户可以选择性地选择该选项。