CMake生成VS2019项目时忽略CMAKE_CXX_COMPILER配置问题
CMake配置ccache在Visual Studio 2019中不生效的原因与解决办法
问题原因
- Visual Studio系列生成器(如
Visual Studio 16 2019)默认依赖自身工具链环境,会忽略CMAKE_CXX_COMPILER的直接设置。CMake配置阶段虽会识别你指定的ccache路径,但生成VS项目文件时,会自动覆盖为VS安装目录下的默认编译器,导致实际编译仍调用原始cl.exe。 - 你看到CMakeOutput.log中编译器标识显示为
C:/tools/ccache/cl.exe,仅代表配置阶段的检测结果,VS项目的构建逻辑不受此影响。
解决办法
方案1:改用Ninja生成器(推荐)
VS生成器对自定义编译器支持有限,Ninja生成器能更好地配合ccache工作:
- 打开VS2019开发者命令提示符,确保加载了VS工具链环境。
- 设置环境变量,让ccache包装VS的编译器:
set CXX=C:/tools/ccache/cl.exe - 执行CMake命令指定Ninja生成器:
cmake.exe -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_LIBDIR=lib/win/Release/x86 -S D:\proj\testproject -B D:\proj\testproject\cmake-build-release - 运行
ninja命令启动构建,ccache会正常缓存编译输出。
方案2:使用CMake编译器启动器
通过CMAKE_CXX_COMPILER_LAUNCHER指定ccache作为编译器启动器,适配VS生成器:
- 创建工具链文件
ccache-toolchain.cmake,内容如下:set(CMAKE_CXX_COMPILER_LAUNCHER "C:/tools/ccache/ccache.exe") - 执行CMake命令时指定该工具链文件:
cmake.exe -G "Visual Studio 16 2019" -A Win32 -DCMAKE_INSTALL_LIBDIR=lib/win/Release/x86 -DCMAKE_TOOLCHAIN_FILE=D:/proj/testproject/ccache-toolchain.cmake -S D:\proj\testproject -B D:\proj\testproject\cmake-build-release
这种方式无需替换编译器路径,CMake会自动通过ccache调用VS的cl.exe,既保留VS项目结构,又能利用ccache缓存。
方案3:手动修改VS项目文件(不推荐)
直接编辑生成的.vcxproj文件,将ClCompile节点下的Command属性替换为C:/tools/ccache/cl.exe。但此方法在CMake重新生成项目后会失效,需重复修改,维护成本高。
内容的提问来源于stack exchange,提问作者RAM
相关产品推荐
相关产品推荐

