为什么CMake要为option配置选项使用缓存机制?
CMake option存入缓存的设计动机
1. 保留用户自定义配置,避免重复传参
CMake的典型工作流包含多次增量配置操作:你首次配置时通过-D参数指定的自定义选项、或者在ccmake/cmake-gui里修改的配置,都需要在后续修改CMakeLists重新触发配置时保留下来。如果option不存在缓存里,你每次重跑CMake都要重新输入所有自定义参数,对有数十个配置项的大型项目来说完全不可用。
2. 保证全项目配置一致性
大型项目通常包含多层嵌套的子模块,同一个配置选项可能会在项目根目录、多个子模块的CMakeLists里被重复读取。缓存作为全局唯一的配置存储池,可以保证同一个option在整个项目的所有上下文里读到的值完全统一,不会出现不同子模块读到同一个option值不一样的问题。
3. 适配交互式配置工具
CMake提供的ccmake(终端交互式配置)、cmake-gui(图形化配置)工具的核心功能,就是让用户可视化修改所有配置项后再生成构建文件。这些修改后的配置必须持久化存入缓存,才能保证后续执行CMake命令、启动构建时,用户的修改不会丢失。
你提到的「测试逻辑需要清缓存」的问题,本质是对option执行规则不熟悉导致的:option命令仅会在对应变量不存在于缓存时才写入默认值,要是缓存中已经有该变量,option不会覆盖已有值。测试逻辑时不需要删除全量缓存,要么直接加-D<OPTION_NAME>=<value>强制覆盖缓存值,要么在option命令前加unset(<OPTION_NAME> CACHE)清除对应变量的缓存即可。
内容的提问来源于stack exchange,提问作者NoSenseEtAl
相关产品推荐
相关产品推荐

