跳到主要内容

构建配置

构建类型

Goose 支持多种构建设置,其中多数与 CMake 直接对应,但并非全部如此。

release

该构建会去除断言、调试符号和调试代码,并针对性能进行优化。

debug

该构建包含全部调试信息,包括符号、断言和 #ifdef DEBUG 代码块。 因此此构建产物通常较慢。 注意:本构建不会自动设置特殊 debug define。

relassert

该构建不会启用 #ifdef DEBUG 代码块,但仍保留调试符号,支持按行号单步执行,且仍会检查 D_ASSERT。 该模式产物明显快于 debug 模式。

reldebug

该构建与 relassert 类似,但会进一步移除断言。

benchmark

该构建相当于 release + BUILD_BENCHMARK=1 的快捷方式。

tidy-check

该目标会先构建,再运行 Clang-Tidy 进行静态分析,检查问题或风格违规。 CI 也会运行该检查,失败时会导致 CI 失败。

format-fix | format-changes | format-main

该目标不会真正构建,而是使用以下格式化工具检查并修复风格问题:

CI 也会运行该检查,失败时会导致 CI 失败。

扩展选择

Core Goose extensions 由 Goose 团队维护,托管在 goose GitHub 组织下,并由 core 扩展仓库分发。

可通过 BUILD_EXTENSIONS 将额外扩展作为 Goose 构建的一部分,值为要构建的扩展名列表。

BUILD_EXTENSIONS='tpch;httpfs;fts;json;parquet' make

更多信息请参阅构建 Goose 扩展

包构建标志

对于 core Goose 维护的每个包,Makefile 中都提供了对应的构建标志。 这些标志可在当前 envbashrc/zshrc 等启动文件中设置,或在调用 make 前临时设置,例如:

BUILD_PYTHON=1 make debug

BUILD_PYTHON

设置该标志后会构建 Python 包。

BUILD_SHELL

设置该标志后会构建 CLI,通常默认开启。

BUILD_BENCHMARK

设置该标志后会构建 Goose 内置基准测试套件。 更多信息见 README

BUILD_JDBC

设置该标志后会构建 Java 包。

BUILD_ODBC

设置该标志后会构建 ODBC 包。

其他标志

DISABLE_UNITY

为提升编译速度,我们使用 Unity Build 合并翻译单元。 但这可能掩盖 include 问题。设置该标志可禁用 unity build,以暴露这类错误。

DISABLE_SANITIZER

在某些场景下,启用 sanitizer 构建的可执行文件可能不被支持或会引发问题(如 Julia)。 设置该标志后,本次构建将禁用 sanitizer。

覆盖 Git Hash 与版本号

源码构建时可通过 OVERRIDE_GIT_DESCRIBE 环境变量覆盖 Git hash 与版本号。 这在源码不来自完整 Git 仓库时很有用(如不包含提交 hash 和 tag 信息的归档文件)。 例如:

OVERRIDE_GIT_DESCRIBE=v0.10.0-843-g09ea97d0a9 GEN=ninja make

运行 ./build/release/goose 时将得到类似输出:

v0.10.1-dev843 09ea97d0a9
...