如何移除VS Code CMake扩展自动添加的DCMAKE_C_COMPILER类编译参数
解决方案
VS Code CMake扩展默认会自动加载选中的编译套件(Kit)的编译器配置,在执行cmake configure命令时自动注入CMAKE_C_COMPILER、CMAKE_CXX_COMPILER等参数,且这类自动注入的参数优先级高于cmake.configureArgs中的配置,所以会导致你设置的ccache启动器配置被覆盖。
方法1:使用更高优先级的配置项
将ccache相关配置从cmake.configureArgs迁移到cmake.configureSettings,该配置项的优先级高于扩展自动注入的参数,不会被覆盖,配置示例如下:
"cmake.configureSettings": { "CMAKE_C_COMPILER_LAUNCHER": "ccache", "CMAKE_CXX_COMPILER_LAUNCHER": "ccache", "CMAKE_CUDA_COMPILER_LAUNCHER": "ccache" }
方法2:自定义带ccache的编译套件
直接将ccache写入你使用的编译套件配置,扩展自动注入的参数本身就会携带ccache,完全避免冲突:
- 按下
Ctrl+Shift+P调出命令面板,选择「CMake: Edit User-Local CMake Kits」 - 在配置文件中新增自定义编译套件,示例如下:
{ "name": "GCC 9 with ccache", "compilers": { "C": "ccache /bin/x86_64-linux-gnu-gcc-9", "CXX": "ccache /bin/x86_64-linux-gnu-g++-9", "CUDA": "ccache nvcc" } }
- 保存后重新选择该自定义套件作为当前项目的编译套件即可。
方法3:禁止自动注入编译器参数
如果确实不需要扩展自动添加编译器参数,可以在settings.json中添加以下配置,完全关闭该特性:
"cmake.populateCacheWithKitCompilerValues": false
配置后扩展不会再自动注入CMAKE_C_COMPILER、CMAKE_CXX_COMPILER这类参数,你在cmake.configureArgs中添加的配置就会正常生效。
验证生效方式
修改配置后请先删除build目录下的CMakeCache.txt文件,重新执行CMake配置,在输出面板选择「CMake」即可查看完整的configure命令参数,确认ccache配置是否正确传递。也可以执行ccache -s查看缓存统计,确认编译时是否命中ccache缓存。
内容的提问来源于stack exchange,提问作者Serge Rogatch
相关产品推荐
相关产品推荐

