不同用户设置的CMake配置选项发生冲突怎么办?
How should I do when different user-set CMake configuration options clash?
假设我有两个缓存的 CMake 字符串供用户设置,但某些值组合发生冲突。
示例:
set(FOO OFF CACHE BOOL "Foo")
set(BAR OFF CACHE BOOL "Bar")
但你不能同时拥有 Foo 和 Bar。
显然,我们可以通过以下方式防止这种情况:
if (FOO AND BAR)
message(FATAL_ERROR "Can't have both Foo and Bar.")
endif()
但是还有其他机制吗?例如在 ccmake 中,如果 FOO 设置为 true,反之亦然,会使 BAR 的值恢复为 false 的东西?
注意:这是一个简化的示例。在简单的情况下,您可以只选择一个三态选项,但是当您有多个可能的值和一个稍微复杂一些的禁止组合谓词时,这将不起作用。
您可能想要使用 set
的 FORCE
选项来强制设置 CMake 缓存变量值。
if (FOO)
set(BAR OFF CACHE BOOL "Bar" FORCE)
elseif (BAR)
set(FOO OFF CACHE BOOL "Foo" FORCE)
endif()
这将在下一次配置通过后反映在 GUI 中。
cmake_dependent_option
可用于此目的,它根据另一组变量为真来设置选项。
例如,
cmake_option(FOO "Use Foo" ON)
cmake_dependent_option(BAR "Use Bar" ON "NOT FOO" OFF)
有关更多信息,请参阅 CMake documentation
假设我有两个缓存的 CMake 字符串供用户设置,但某些值组合发生冲突。
示例:
set(FOO OFF CACHE BOOL "Foo")
set(BAR OFF CACHE BOOL "Bar")
但你不能同时拥有 Foo 和 Bar。
显然,我们可以通过以下方式防止这种情况:
if (FOO AND BAR)
message(FATAL_ERROR "Can't have both Foo and Bar.")
endif()
但是还有其他机制吗?例如在 ccmake 中,如果 FOO 设置为 true,反之亦然,会使 BAR 的值恢复为 false 的东西?
注意:这是一个简化的示例。在简单的情况下,您可以只选择一个三态选项,但是当您有多个可能的值和一个稍微复杂一些的禁止组合谓词时,这将不起作用。
您可能想要使用 set
的 FORCE
选项来强制设置 CMake 缓存变量值。
if (FOO)
set(BAR OFF CACHE BOOL "Bar" FORCE)
elseif (BAR)
set(FOO OFF CACHE BOOL "Foo" FORCE)
endif()
这将在下一次配置通过后反映在 GUI 中。
cmake_dependent_option
可用于此目的,它根据另一组变量为真来设置选项。
例如,
cmake_option(FOO "Use Foo" ON)
cmake_dependent_option(BAR "Use Bar" ON "NOT FOO" OFF)
有关更多信息,请参阅 CMake documentation