从4.6.1版本开始,ccache支持msvc编译。
在我的Windows环境中,我已经安装了ccache并通过命令行可用。我尝试通过以下方式将缓存集成到我的cmake项目中:
根CMakeLists.txt:
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
message("CCACHE is found")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) # Less useful to do it for linking, see edit2
else(CCACHE_FOUND)
message("CCACHE is NOT found")
endif(CCACHE_FOUND)
下面是我在CMakePresets.json中的cmake配置:
{
"name": ",
"hidden": false,
"generator": "Visual Studio 17 2022",
"toolset": {
"value": "host=x64",
"strategy": "external"
},
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_C_COMPILER": "cl.exe",
"CMAKE_CXX_COMPILER": "cl.exe",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_TOOLCHAIN_FILE": {
value": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"type": "FILEPATH"
},
"VCPKG_INSTALLED_DIR": "${sourceDir}/build/packages",
"VCPKG_TARGET_TRIPLET": "x64-windows-static-md"
},
"vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "hostOS": [ "Windows" ] } }
}
当运行构建时,我可以看到找到ccache,但我没有看到它工作或被构建系统调用的迹象。
运行ccache -s
显示每个stat都为0,就好像ccache从未被调用过。
问题:
- 如何正确配置MSVC &cmake吗?
- 我如何确保缓存工作和正确的命令正在被构建系统使用?有没有"废话"?选项我可以提供给cmake/ccache调试这个?
<LANG>_COMPILER_LAUNCHER
属性不能与Visual Studio生成器一起工作。根据文档,它只对Makefile和Ninja生成器可用:https://cmake.org/cmake/help/v3.24/prop_tgt/LANG_COMPILER_LAUNCHER.html
指定一个分号分隔的列表,其中包含编译器启动工具的命令行。Makefile生成器和Ninja生成器将运行该工具,并将编译器及其参数传递给该工具。一些示例工具是distcc和ccache。
要使它工作,你需要在配置CMake项目时指定生成器,例如
cmake -S C:projectsrc -B C:projectbuild -G "Ninja"