目标和动力
2020 年,我们推出了新的 build 模板,用于定义软件包、组件及其测试。新模板会更贴切地反映项目的架构目标和方向。它们取代了 2016 年的旧模板,主要是 package()
、test_package()
和 unittest_package()
。
新模板的部分优势包括:
- 重复更少,语法更简洁。从将旧目标迁移到新模板的经验,新定义的行数减少了 30%-50%。
- 组件可以定义一次,然后就可以在多个软件包中使用。例如,在参与产品定义的生产软件包的定义以及包含组件与其他组件之间的集成测试的软件包中,可重复使用同一组件。
- 由于组件和软件包可以单独定义,因此构建系统知道哪些依赖项属于哪个组件,并且可以为您执行更复杂的构建时验证,从而自动检测错误并提供更清晰的反馈。
- 原生支持更多用例,无需特殊语法。例如,包含驱动程序、其他数据文件或共享库的软件包不需要特殊语法 - 只需在定义您希望组件使用或包含的软件包的构建目标上添加
deps
即可。 - 您可以更轻松地定义不需要手动编写组件清单(
.cml
文件)的简单测试。 - 我们提供了更好的文档,涵盖更多语言和用例。
迁移到新模板可以提高我们的 build 定义的可读性和实用性,并有助于清理与打包相关的底层技术债务,这些债务仅在使用旧版 package()
模板时保持有效。请帮助我们用新模板替换掉所有使用旧模板,以便继续操作。
技术背景
请参阅有关构建组件的指南。
我们建议您最好拥有使用 BUILD.gn
文件的一般经验,但这并非强制要求。
请参阅 GN 参考指南。
如何提供帮助
选择任务
最好先查看 //build/BUILD.gn
中的 "deprecated_package"
组下的列表。
找到您熟悉的目录,或随机选择一个。
在此目录的 BUILD.gn
文件中,您可能会看到具有旧模板的 build 目标,例如:
package("foo") {
...
}
执行任务
在您选择的目录中,移除模板 package()
、test_package()
或 unittest_package()
的 BUILD.gn
文件中的所有用例。请注意,文件中可能还有其他模板封装了这些模板。请确保您获得了所有这些信息,方法是删除 //build/BUILD.gn
中的相关代码行,看看您仍然可以生成 build(运行 fx gen
,然后看到 GN 已成功生成 Ninja 文件,没有出现错误)。
完成任务
在准备更改时,请务必从列出您已清理的目录的 //build/BUILD.gn
中移除所有行。
将代码审核发送给包含要更改的 build 定义的目录的所有者,或者向下面列出的志愿协助完成这些迁移的人员发送代码审核:
- shayba@google.com
- xbhatnag@google.com
您是新志愿者吗?请将您自己添加到列表中!
示例
- 464409:[时间] 将所有软件包和测试迁移到新的构建规则
- 464407:[构建] 将 //src/sys/lib 中的测试迁移到新的构建规则
- 464410:[构建] 将 //src/sys 中的软件包迁移到新的构建规则
- 473597:[会话] 将所有软件包和测试迁移到新的构建规则
赞助商
如有疑问或想了解最新状态,请与我们联系: