-
Notifications
You must be signed in to change notification settings - Fork 19
SHBuild.zh CN
位于 Tools/SHBuild
,是可以用来遍历目录编译链接本机程序的命令行工具。当前仅支持 MinGW32/MinGW64 环境。其它平台详见以下小节。
直接(不带参数)运行 SHBuild
查询使用方法和选项等说明。
通过设置环境变量控制 SHBuild 使用调用的后端工具。
除以 -x
起始的特定选项(详见说明),当前 SHBuild 支持的命令行直接传除递给后端,若需要构建复杂项目,可以使用其它的脚本支持。
若环境变量 SHBuild_CFLAGS 和 SHBuild_CXXFLAGS 被定义为非空值,调用 C 和 C++ 编译器命令行时,变量的值会先于上述命令行选项被传递,两者之间以一个空格间隔。
本节说明 SHBuild 的构建。使用 SHBuild 构建用户程序,参见之后的章节。
关于使用 bash
构建库、 SHBuild 、测试项目和基于 SHBuild 上的用户程序,参见关于 MinGW sysroot 的说明。
运行脚本 Tools/SHBuild-build.sh
生成 SHBuild 可执行文件。
如能成功使用以下的方法,一般不建议使用直接构建的版本。
运行脚本 Tools/SHBuild-self-host.sh
自举测试使用上述脚本编译得到的 SHBuild
。
SHBuild 支持本机自举,即在本机环境上直接构建 SHBuild 后继续使用 SHBuild 构建自身。
- 第一阶段(stage 1) 。
- 调用脚本
Tools/Scripts/SHBuild-build.sh
。只依赖编译器进行编译链接。 - 这个阶段的 SHBuild 通过脚本直接选取 YSLib 中的源文件作为依赖进行构建。
- 因为直接调用编译器驱动链接,不支持显式指定并行编译,相对比较慢。编译的结果是静态链接的,文件体积比较大。
- 主要用于下一阶段使用。不建议直接使用。
- 调用脚本
- 第二阶段(stage 2) 。
- 在脚本
Tools/install-sysroot.sh
内直接调用上一阶段构建的SHBuild
,构建时链接到之前构建的 YFramework.dll 和 YBase.dll 。 - 这是当前最终生成的 SHBuild 。
- 链接和运行依赖 YFramework.dll 和 YBase.dll 。
- 在脚本
也可以直接使用 SHBuild-self-host.sh
和 SHBuild-self-host-DLL.sh
进行直接自举。这两个脚本主要用于内部测试。
遍历扫描目录时, SHBuild
识别名称符合特定模式串的文件。
当前支持后缀名。
文件名符合以下通配符模式的文件视为 C 源文件:
- *.c
文件名符合以下通配符模式的文件视为 C++ 源文件:
- *.cpp
- *.cc
- *.cxx
对以上文件,对应的内建 C 和 C++ 编译器规则分别被调用。其它文件不被视为源文件。
和 make
类似, SHBuild 的内建规则依赖文件修改时间(mtime) 判断一个目标是否最新。
内建规则使用的编译器和环境变量参见直接运行 SHBuild
的使用说明。
除构建 stage 1 SHBuild 外,当前未正式支持 Linux 。
因为 SHBuild 本身和直接依赖的代码已经保证了可移植性,所以静态链接可以成功。得到的可执行文件除了没有扩展名,用法和前述 MinGW 下相同。
在进一步编译 YFramework 时会出错,因为 YFramework 中宿主 GUI 支持未在 Linux 上实现。这不影响已经构建的 SHBuild 的可用性。
已知限制 若系统时间不正确,可能导致冗余的重复构建或无法构建。若文件时间戳无法被正确更新(如编译器或者文件系统实现问题导致无法在命令执行后正确地更新被修改的文件时间,或者不恰当的缓存配置导致修改时间没有立即更新),可能导致冗余的重复构建。
当前不支持上述以外的其它平台。