我有一个变量X
。 X
可以生成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()
人们通常是这样做的吗?
答案 0 :(得分:1)
您的方法的独特属性是用户永远不会看到X
的生成值。如果这是有意的,你的方法很好,但它不应该是默认的。
这样做的惯用方法很简单:
set(X ${GENERATED_X} CACHE STRING "The value X")
这具有以下效果:
X
条目,则CMake会创建一个并将其设置为GENERATED_X
的值。X
条目,则此命令 nothing 。无论您尝试将其设置为与缓存中存在的值匹配,都是如此。因此,用户可以通过手动将其设置为不同的值来覆盖该值(就像之前一样),但如果他们选择不这样做,他们将在缓存中看到生成的值(与之前不同)。
此外,如果用户确实覆盖了该值并希望返回默认值,则他们需要从缓存中删除更改后的值(例如,点击Remove Entry
中的cmake-gui
按钮)并重新运行CMake。与当前方法一样,将其设置为空,只需使用""
作为覆盖值。