自2010年以来,我们使用称为JamPlus的基于Jam的构建系统来构建Unity。
1.Jam构建系统概述
1.1 JAM.EXE
有一个构建引擎(build engine),即jam.exe。它知道如何解析描述构建的 *.jam 文件,找到哪些内容需要更新以构建某些内容,并在可能的情况下并行执行这些构建命令。
1.2 JAMPLUS
“JamPlus”是在此之上编写的一堆规则,结合了 Jam 和 Lua 语言。 这些是辅助工具,例如“查找 C++ 编译器”,描述 C/C++ 程序的基本结构等。JamPlus 还可以为 Visual Studio、Xcode 等生成 IDE 项目文件。
1.3 .JAM
我们有一堆我们自己的 *.jam 文件,它们描述了 Unity 本身的部分和平台。 从像“这是一个要编译的 C++ 文件列表,那里是编译器标志”这样的简单事情,到更多涉及在构建时生成代码的事情。
2.“Jam with C#” project at Hackweek
在Unity Hackweek 2016上,我们将 C#(通过 Mono)直接嵌入到 jam.exe 中,并使其能够运行 C# 代码来描述要构建的所有内容,而不是解析 Jam 语言文件。 还写了一个从Jam 语言转换成C# 语言的程序。
因此,所有 *.jam文件(我们自己的构建代码,以及大部分 JamPlus 规则)都变成了C#文件,但在功能上没有任何变化。
在 2017 年 2 月,删除所有旧的 *.jam 文件,推出了自动转换的 C# 构建代码。
3.开始使用Auto-converted-Jam-to-C#
使用Auto-converted-Jam-to-C#后,我们开始编写新的基于 C# 的 API 来表达“如何构建程序”规则,我们称之为“Bee”。
我们还将 IDE 项目文件的生成从 JamPlus 中基于 Lua 的文件重写为 C#。
当然,此时我们所有的构建代码仍然使用旧的 JamPlus-but-now-C# API 来表达需要如何构建事物。我们开始采用所有这些部分并将它们转换为使用新的 Bee 构建 API:
4.Jam 切换到 Tundra 后端
2018 年,Jam 切换到 Tundra 后端。Jam.exe最终被删除。
5.2019,现状
今天,在我们的主要代码存储库中,jam.exe 已不复存在,而且几乎所有由 JamPlus 转换的 C# 代码都已删除。
与多年前的构建状态相比,构建了很多不错的构建相关工具,总的来说构建性能、可靠性、用户体验、工作流程的各个方面都得到了改进。
有了这个相当不错的构建系统(“Bee”),可以使用它在主代码存储库之外构建东西! 所以它也被用来构建我们使用的各种外部库,例如各种插件/包。