ccache配合Emscripten.cmake工具链文件无法正常工作的问题
解决CMake + Emscripten配置ccache缓存不生效的问题
以下是针对性的排查和解决步骤:
验证CMake是否正确应用了ccache launcher
- 打开构建目录下的
CMakeCache.txt,搜索CMAKE_C_COMPILER_LAUNCHER和CMAKE_CXX_COMPILER_LAUNCHER,确认它们的值为ccache - 执行构建时添加
VERBOSE=1参数(如make -C build_wasm VERBOSE=1),查看编译命令是否带有ccache前缀——正常应该显示ccache emcc ...或ccache em++ ...,而非直接调用编译器
- 打开构建目录下的
规避Emscripten工具链对launcher的覆盖
Emscripten的CMake工具链可能会重置编译器相关变量,导致launcher设置失效。可以尝试:
在项目的CMakeLists.txt开头(project()命令之前)添加:set(CMAKE_C_COMPILER_LAUNCHER ccache) set(CMAKE_CXX_COMPILER_LAUNCHER ccache)或者通过命令行强制注入设置:
创建一个ccache_setup.cmake文件,内容为上述两行set命令,然后在CMake命令中添加-DCMAKE_PROJECT_INCLUDE_BEFORE=ccache_setup.cmake检查ccache配置是否排除了Emscripten编译器
- 查看ccache配置文件(通常为
~/.ccache/ccache.conf),确认没有exclude_compiler=emcc或exclude_compiler=em++这类配置,如有则删除 - 临时设置环境变量
CCACHE_DEBUG=1后执行构建,查看ccache的调试输出,排查缓存不生成的具体原因(如参数不匹配、目录权限问题等)
- 查看ccache配置文件(通常为
确认ccache缓存目录的有效性
- 执行
ccache -s查看当前缓存状态,确认缓存目录路径符合预期,且当前用户拥有读写权限 - 检查是否设置了
CCACHE_DIR环境变量,导致你查看的目录并非实际缓存存储路径
- 执行
直接指定带ccache的编译器(替代launcher方式)
如果launcher方式始终无效,可以绕开launcher,直接让CMake调用带ccache的编译器:cmake -B build_wasm -S . -DCMAKE_TOOLCHAIN_FILE=/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_C_COMPILER="ccache emcc" -DCMAKE_CXX_COMPILER="ccache em++"
内容的提问来源于stack exchange,提问作者DOOOBETTER zhang
相关产品推荐
相关产品推荐

