我有一个CMake设置,其中一个变量的可访问性将取决于是否设置了另一个变量。小片段:
option(build-compiler "Build the Nap Compiler" ON)
set(include_interrupt_dirs CACHE INTERNAL "interrupts/intr_4" FORCE)
if(build-compiler)
option(enable-runtime-compilation
"Build in the runtime code compilation link in intr_2 & intr_3)" ON)
if(enable-runtime-compilation)
list(APPEND include_interrupt_dirs "interrupts/intr_2" "interrupts/intr_3" )
endif()
endif()
我使用cmake-gui来配置项目,我想要实现的是:
build-compiler
,则还应显示enable-runtime-compilation
。这部分已经完成。build-compiler
enable-runtime-compilation
隐藏。这不起作用。你知道如何让它发挥作用吗?
答案 0 :(得分:1)
您可以使用unset(var CACHE)
从缓存中删除变量:
if(build-compiler)
option(enable-runtime-compilation
"Build in the runtime code compilation link in intr_2 & intr_3)" ON)
if(enable-runtime-compilation)
list(APPEND include_interrupt_dirs "interrupts/intr_2" "interrupts/intr_3" )
endif()
else()
unset(enable-runtime-compilation CACHE)
endif()
答案 1 :(得分:0)
使用unset(var [CACHE])
非常棘手。如果您只是取消设置变量,它将保留在缓存中(尽管脚本不可见,但用户仍然可以看到它)。如果你也从缓存中删除它,那么你将失去那里的值。
在我的用例中,我想根据某些条件隐藏变量。我发现从缓存中删除变量可能会让人感到困惑,因为在恢复时,它们会返回到默认状态而不是用户之前可能设置的状态。
我更喜欢使用mark_as_advanced(FORCE var)
隐藏变量,并使用mark_as_advanced(CLEAR var)
取消隐藏。它完全符合您的需要 - 它隐藏了GUI中的变量,但它仍然存在于缓存中。您可以将此与“soft”unset(没有CACHE
的那个)一起使用,以确保隐藏变量仍未在配置中使用。
此外,还有CMakeDependentOption
专门用于此用例(仅在某些条件集评估为true
时才可用的选项)。从CMake 3.0.2开始,这显然是可用的。