⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
构建配置

构建类型

DuckDB 可以在许多不同的设置下进行构建,其中大多数直接对应于 CMake,但并非全部。

发布

此版本已剥离所有断言、调试符号和代码,并针对性能进行了优化。

debug(调试版本)

此版本包含所有调试信息,包括符号、断言和 #ifdef DEBUG 代码块。因此,此版本的二进制文件运行速度较慢。注意:此构建不会自动设置特殊的调试定义。

relassert(发布+断言版本)

此版本不会触发 #ifdef DEBUG 代码块,但仍保留调试符号,使其能够通过行号信息逐步调试执行,并且在此版本中仍会检查 D_ASSERT 行。此构建模式的二进制文件比 debug 模式快得多。

reldebug(发布+调试版本)

此版本在许多方面与 relassert 类似,只是断言在此版本中也被剥离了。

基准测试

此版本是 release 的简写,并设置了 BUILD_BENCHMARK=1

tidy-check(代码规范检查)

这将创建一个构建并运行 Clang-Tidy,通过静态分析来检查问题或代码风格违规。CI(持续集成)也会运行此检查,如果检查失败,构建将失败。

format-fix | format-changes | format-main

这实际上不会创建构建,而是使用以下格式检查器来检查风格问题:

  • clang-format:用于修复代码中的格式问题。
  • cmake-format:用于修复 CMakeLists.txt 文件中的格式问题。

CI 也会运行此检查,如果检查失败,构建将失败。

扩展选择

核心 DuckDB 扩展是由 DuckDB 团队维护的扩展。它们托管在 duckdb GitHub 组织中,并由 core 扩展存储库提供支持。

可以通过 BUILD_EXTENSIONS 标志并列出要构建的扩展名称,将其他扩展作为 DuckDB 的一部分进行构建。

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

有关此主题的更多信息,请参阅 构建 DuckDB 扩展

包标志

对于核心 DuckDB 维护的每个包,Makefile 中都有一个标志来启用该包的构建。可以通过在当前 env 中设置它们、通过 bashrczshrc 等设置文件,或者在调用 make 之前设置它们来启用,例如:

BUILD_PYTHON=1 make debug

BUILD_PYTHON

设置此标志时,将构建 Python 包。

BUILD_SHELL

设置此标志时,将构建 CLI,通常默认启用。

BUILD_BENCHMARK

设置此标志时,将构建 DuckDB 的内部基准测试套件。有关更多信息,请参阅 README

BUILD_JDBC

设置此标志时,将构建 Java 包。

BUILD_ODBC

设置此标志时,将构建 ODBC 包。

其他杂项标志

DISABLE_UNITY

为了缩短编译时间,我们使用 Unity Build 来合并翻译单元。然而,这可能会隐藏 include 错误,此标志禁用了 Unity 构建,以便可以检测到这些错误。

DISABLE_SANITIZER

在某些情况下,运行已启用消毒器(sanitizers)构建的可执行文件是不受支持的或会导致问题。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
...
© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南