CMake的set命令中INTERNAL参数是否隐含FORCE?两种写法是否等价?
CACHE INTERNAL参数与FORCE的关系
首先给出明确结论:「INTERNAL implies FORCE」指的是FORCE会被CMake自动应用,不需要在使用INTERNAL时额外添加FORCE关键字,你列出的两种写法完全等价。
具体说明:
- 执行
set(foo "value" CACHE INTERNAL "description")时,CMake会自动触发FORCE的行为——不管foo变量此前是否已在缓存中存在,都会被强制覆盖为指定的"value",同时该变量会被标记为内部缓存变量,不会在cmake-gui、ccmake等可视化工具中对用户可见。 - 手动加上
FORCE关键字的写法set(foo "value" CACHE INTERNAL "description" FORCE)不会产生任何额外效果,因为INTERNAL参数本身已经包含了FORCE的强制覆盖逻辑。
适用场景:
INTERNAL类型的缓存变量适合存储需要持久化保留(跨CMake运行会话保存),但用户通常不需要、也不应该修改的值,比如构建过程中生成的临时路径、自动检测到的依赖版本等。
内容的提问来源于stack exchange,提问作者Matt Stokes
相关产品推荐
相关产品推荐

