来自CMake set()
命令的文档:
如果为INTERNAL,该高速缓存变量被标记为内部变量,并且不会在cmake-gui等工具中向用户显示。这适用于应保留在缓存中但用户通常不应更改的值。INTERNAL表示FORCE。
通过“INTERNAL implied FORCE",这是否意味着应用了FORCE
,或者是否意味着使用INTERNAL
也应该应用FORCE
?
以下是否等价?
set(foo "value" CACHE INTERNAL "description" FORCE)
set(foo "value" CACHE INTERNAL "description")
2条答案
按热度按时间bq3bfh9z1#
cmake设置INTERNAL是否应用FORCE?
大多数情况下是的。
如果缓存变量是通过命令行指定的,没有类型(当然-这是一个奇怪的边缘情况-我们不得不问为什么用户会考虑通过命令行设置一些应该是内部的东西),那么在生成的buildsystem的 * 初始配置 * 期间,
FORCE
当前不会隐式应用于INTERNAL
。从刚刚尝试:
如果通过
set()
预先设置缓存条目:如果通过命令行使用指定的类型预先设置缓存条目:
如果通过命令行预先设置未指定类型的缓存条目:
如果我没看错的话,这个小问题在CMake的Kitware问题跟踪器上已经提到了:set: CACHE INTERNAL type initialization drops value (#22734)。请参见Brad King(维护者之一)的回复:
问题出在这里的代码中,该代码用于初始化没有定义的缓存条目的类型。它考虑了
FORCE
,这意味着旧值将不会保留,但没有考虑类型INTERNAL
,这意味着隐式"强制"。此修补程序修复了它:需要进一步调查以确定该更改的其他可能影响以及是否需要policy。这可能不常被注意到,因为
INTERNAL
类型通常不打算公开设置。作为一种解决方法,可以在命令行上显式传递类型:-Dvar:INTERNAL=value
。这将跳过有问题的代码路径。5anewei62#
cmake设置INTERNAL是否应用FORCE?
是的。
"内部"意味着"力",这是否意味着施加了"力",
是的。
以下是否等价?
是的。