CMake执行install操作速度极慢,使用ccache后大幅提速是什么原因?
CMake install阶段耗时异常及ccache加速原因分析
ccache并没有直接解决文件资源抢占问题,你观察到的install阶段耗时下降,本质是构建阶段耗时减少的间接体现,核心原因如下:
- 你统计的install时长包含了隐性构建任务:CMake的
install目标默认会自动校验所有目标的更新状态,只要有未完成的构建、链接、后处理任务,都会先执行完这些任务再启动文件拷贝流程。你之前统计的1分40秒install耗时,绝大多数时间都花在了未完成的构建任务上,纯文件拷贝的占比极低,你之前统计的1分20秒构建耗时并不完整,没有覆盖到install触发的隐性任务。 - 冷缓存状态下ccache也能优化编译流程效率:即使没有命中缓存,ccache也对头文件依赖扫描、临时文件管理、重复hash计算做了针对性优化,能减少编译过程中不必要的文件IO和系统调用,降低整体构建阶段的耗时,对应的install阶段需要等待的前置任务耗时自然会同步下降。
- 同一次构建流程内ccache也能命中缓存:如果你的项目存在多子模块依赖同一公共头文件、同一目标被多次编译的情况,ccache会在首次编译后缓存结果,同一次构建流程内的重复编译请求可以直接命中缓存,避免重复工作,这部分节省的时间也会体现在install阶段的总耗时统计中。
- 剩余40秒耗时的常见原因:仅50MB文件拷贝的场景下仍然有40秒耗时,通常和CMake install阶段的非拷贝操作有关,包括可执行文件rpath重写、权限修改、strip裁剪、自定义install脚本执行、符号链接生成等,你可以执行
cmake --install . --verbose查看install阶段的具体执行步骤,定位具体耗时点。
内容的提问来源于stack exchange,提问作者CodeMonkey
相关产品推荐
相关产品推荐

