V2 进行了大量的性能优化,新功能支持,以及代码重构。升级到 V2,可以获得这些好处:
- 完善支持
java
、scala
构建 - 支持把头文件纳入依赖管理
- 支持完整的可见性控制
- 支持用
foegign_cc_library
描述其他构建系统(例如 GNU Autotools、CMake 等)的构建结果 - 支持自定义扩展,通过
load
语句加载,你可以通过gen_rule
编写自己的规则,定义常量和辅助函数等 - 进行了大量的性能优化
- 更优化的诊断信息,BUILD 文件错误可以跳转到相应的行号
- 支持性能分析和诊断
- 支持输出编译慢和测试慢的目标
- 支持安静模式(
--quite
参数),无错误时只输出进度条 clean
子命令更精准,只清理直接目标,并且确保清理干净- 完整支持英文文档
V2 只支持 2.7 和 3.x,不再支持旧版的 Python,其中 3.x 只测试过 3.6 和 3.9。
Blade 本身是一个"元"构建系统,它本身并不直接构建目标,而只是加载构建规则,进行依赖分析,生成 后端构建系统的构建描述文件后,再调用后端构建系统进行实际的构建。 最初 Blade 是以 Scons 作为后端构建系统,后来为了优化构建速度支持了 ninja 做后端构建系统, 由于 ninja 的表现全面优于 Scona,我们在 V2 中彻底放弃了支持 Scons,只支持 ninja。 要升级到 V2,需要先安装 ninja,可以选择通过包管理或者自行下载安装。
头文件现在也纳入了管理。构建用旧版 BUILD 规则的代码库会报错,可以通过局部抑制来屏蔽历史遗留问题。也可以全局关闭检查, 但是强烈建议使用该功能。具体参见配置和cc中的相关部分。
目标的可见性默认为私有,同一个 BUILD
文件内可见,可以通过全局配置关闭或者对现存的
目标设置为 PUBLIC 而只检查将来新增的构建目标。
在 1.0 中,预编译的二进制库的搜索目录硬编码为类似 lib64_debug
、lib64_release
的目录名,
我们观察到在实际使用中对这类库极少有提供及需要区分 debug
/release
版本的情况,因此在 2.0 中,默认了去掉了涉及构建模式部分。
如果需要兼容原来的行为,可以设置libpath_pattern 属性。 如果需要全局兼容原来的行为,可以修改全局配置项 cc_library_config.prebuilt_libpath_pattern。