如果提高CMake编译速度
上个月在写rust的时候,有几个依赖有点大,编译速度感人,其实rust的编译速度一直就被人诟病,当然,有些是rust自身的问题,比如编译期的检查,泛型,RAII,宏;然后去网上找了些资料,搜索到一篇很有价值的文章:Tips for Faster Rust Compile Times,里面提到了些很有意思的点:泛型会影响到编译速度,因为在编译的时候,使用泛型的代码会去生成新的代码,包括你写的代码,以及源代码;还有使用编译缓存工具Sccache;更换更快的链接器。
公司有套CMake项目的代码,往后项目也会越来越大,节省编译的时候将会变得很有意义。有时候如何去优化一个问题,需要你对整个流程有足够的了解,知道他有哪些阶段,不同的阶段会干什么。才能对不同的环节进行优化
列表:
- 并行编译
- 更换更快的构建系统,比如Ninja
- 预编译头文件:target_precompile_headers (CMake3.16)
- 使用编译缓存ccache、sccache(CMake 3.4)
- 更新新版本的CMake、编译器和链接器
- 删除没有使用的代码和依赖
并行编译
开多线程,废话
更换更快的构建系统,比如Ninja
Android源码也是使用这个来编译
Ninja Design goals:https://ninja-build.org/manual.html#_design_goals
预编译头文件:target_precompile_headers
文章:https://github.com/sakra/cotire
使用编译缓存ccache、sccache
ccache:
使用cmake配置:https://crascit.com/2016/04/09/using-ccache-with-cmake/
cmake
cmake_minimum_required(VERSION 3.12)
find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
endif()
project(SomeProject)
sccache:
cmake配置:
cmake
-DCMAKE_C_COMPILER_LAUNCHER=sccache
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache
rust配置:
自己写rust是用的这个,编译速度会快上不少
ini
# $HOME/.cargo/config
[build]
rustc-wrapper = "/path/to/sccache"
更新新版本的CMake、编译器和链接器
新版本cmake编译速度提升:https://blog.kitware.com/improving-cmakes-runtime-performance/
速度更快的链接器mold:https://github.com/rui314/mold
bash
$ mold -run make <make-options-if-any>
删除没有使用的代码和依赖
todo