仅在设置cmake时使用缓存值

时间:2014-05-12 16:31:59

标签: cmake

我有一个变量XX可以生成CMakeList。所以我通常做的是:

set(X_OVERRIDE CACHE STRING "" "Overrides the generated value for X")
MARK_AS_ADVANCED(FORCE X_OVERRIDE)
IF("${X_OVERRIDE}" STREQUAL "")
set(X ${GENERATED_X})
ELSE()
SET(X ${X_OVERRIDE})
ENDIF()

人们通常是这样做的吗?

1 个答案:

答案 0 :(得分:1)

您的方法的独特属性是用户永远不会看到X的生成值。如果这是有意的,你的方法很好,但它不应该是默认的。

这样做的惯用方法很简单:

set(X ${GENERATED_X} CACHE STRING "The value X")

这具有以下效果:

  • 如果缓存中没有X条目,则CMake会创建一个并将其设置为GENERATED_X的值。
  • 如果缓存中已存在X条目,则此命令 nothing 。无论您尝试将其设置为与缓存中存在的值匹配,都是如此。

因此,用户可以通过手动将其设置为不同的值来覆盖该值(就像之前一样),但如果他们选择不这样做,他们将在缓存中看到生成的值(与之前不同)。

此外,如果用户确实覆盖了该值并希望返回默认值,则他们需要从缓存中删除更改后的值(例如,点击Remove Entry中的cmake-gui按钮)并重新运行CMake。与当前方法一样,将其设置为空,只需使用""作为覆盖值。