⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
构建配置

构建类型

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

release

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

debug

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

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 失败。

扩展选择

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

核心扩展可以通过 CORE_EXTENSIONS 标志作为 DuckDB 的一部分进行构建,然后列出要构建的扩展名称。

CORE_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 Build,以便可以检测到这些错误。

DISABLE_SANITIZER

在某些情况下,运行已启用 Sanitizer 构建的可执行文件不受支持或可能导致问题。Julia 就是一个例子。启用此标志后,构建将禁用 Sanitizer。

覆盖 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
...