构建类型
DuckDB可以在许多不同的设置中构建,其中大多数直接对应于CMake,但并非全部。
release
此版本已移除所有断言、调试符号和代码,针对性能进行了优化。
debug
此构建运行包含所有调试信息,包括符号、断言和#ifdef DEBUG
块。
由于这些原因,此构建的二进制文件预计会较慢。
注意:此构建不会自动设置特殊的调试定义。
relassert
此构建不会触发#ifdef DEBUG
代码块,但它仍然具有调试符号,使得可以逐步执行并带有行号信息,并且在此构建中仍然检查D_ASSERT
行。
此构建模式的二进制文件比debug
模式的二进制文件要快得多。
reldebug
这个构建在许多方面与relassert
相似,只是在这个构建中,断言也被移除了。
benchmark
此构建是带有BUILD_BENCHMARK=1
设置的release
的简写。
tidy-check
这将创建一个构建,然后运行Clang-Tidy,通过静态分析检查问题或风格违规。 CI 也将运行此检查,如果此检查失败,将导致构建失败。
format-fix
| format-changes
| format-main
这实际上并不会创建一个构建,而是使用以下格式检查器来检查样式问题:
- clang-format 用于修复代码中的格式问题。
- cmake-format 用于修复
CMakeLists.txt
文件中的格式问题。
CI 也会运行此检查,如果此检查失败,将导致失败。
扩展选择
核心DuckDB扩展是由DuckDB团队维护的。这些扩展托管在duckdb
GitHub组织中,并由core
扩展仓库提供服务。
核心扩展可以通过CORE_EXTENSION
标志作为DuckDB的一部分构建,然后列出要构建的扩展名称。
CORE_EXTENSION='tpcd;httpfs;fts;json;parquet' make
有关此主题的更多信息,请访问building duckdb extensions。
包标志
对于由DuckDB核心维护的每个包,Makefile中都有一个标志来启用包的构建。
可以通过在当前env
中设置它们,通过像bashrc
或zshrc
这样的设置文件,或者在调用make
之前设置它们来启用这些标志,例如:
BUILD_PYTHON=1 make debug
BUILD_PYTHON
当此标志设置时,Python 包会被构建。
BUILD_SHELL
当此标志设置时,CLI 会被构建,这通常是默认启用的。
BUILD_BENCHMARK
当此标志被设置时,DuckDB的内部基准测试套件将被构建。 更多关于此的信息可以在此处找到 here.
BUILD_JDBC
当设置此标志时,Java 包将被构建。
BUILD_ODBC
当此标志设置时,将构建ODBC包。
杂项标志
DISABLE_UNITY
为了提高编译时间,我们使用Unity Build来合并翻译单元。 然而,这可能会隐藏包含错误,此标志禁用使用unity构建,以便可以检测到这些错误。
DISABLE_SANITIZER
在某些情况下,运行已启用消毒剂构建的可执行文件是不支持的/可能会导致问题。Julia 就是一个例子。 启用此标志后,构建时将禁用消毒剂。
覆盖 Git 哈希和版本
在使用OVERRIDE_GIT_DESCRIBE
环境变量从源代码构建时,可以覆盖Git哈希和版本。
这在从不是完整Git仓库的源代码构建时非常有用(例如,没有提交哈希和标签信息的存档文件)。
例如:
OVERRIDE_GIT_DESCRIBE=v0.10.0-843-g09ea97d0a9 GEN=ninja make
运行 ./build/release/duckdb
时将产生以下输出:
v0.10.1-dev843 09ea97d0a9
...