如何通过 cmake 在 Windows MSVC 上使用 ccache > 4.6.1?

Ela*_*oni 8 c++ cmake visual-c++ ccache

版本 4.6.1开始,ccache 支持使用 msvc 进行编译。

在我的 Windows 环境中,我安装了 ccache,并可以通过命令行使用它。我尝试通过以下方式将 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)
Run Code Online (Sandbox Code Playgroud)

这是我在 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" ] } }
}
Run Code Online (Sandbox Code Playgroud)

运行构建时,我可以看到找到了 ccache,但我没有看到任何迹象表明它可以工作或被构建系统调用。

运行ccache -s显示每个 stat 都是 0,就好像 ccache 从未被调用过一样。

问题:

  • 如何使用 MSVC 和 cmake 正确配置 ccache?
  • 如何确保 ccache 正常工作并且构建系统使用正确的命令?我可以向 cmake / ccache 提供“详细”选项来调试它吗?

小智 2

<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:\project\src -B C:\project\build -G "Ninja"