构建配置
构建类型
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
该目标不会真正构建,而是使用以下格式化工具检查并修复风格问题:
- clang-format:修复代码格式问题
- cmake-format:修复
CMakeLists.txt格式问题
CI 也会运行该检查,失败时会导致 CI 失败。
扩展选择
Core Goose extensions 由 Goose 团队维护,托管在 goose GitHub 组织下,并由 core 扩展仓库分发。
可通过 BUILD_EXTENSIONS 将额外扩展作为 Goose 构建的一部分,值为要构建的扩展名列表。
BUILD_EXTENSIONS='tpch;httpfs;fts;json;parquet' make
更多信息请参阅构建 Goose 扩展。
包构建标志
对于 core Goose 维护的每个包,Makefile 中都提供了对应的构建标志。
这些标志可在当前 env、bashrc/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
...