Build-Konfiguration
Build-Typen
DuckDB lässt sich in vielen verschiedenen Einstellungen bauen; die meisten entsprechen direkt CMake, aber nicht alle.
release
Dieser Build ist von allen Assertions und Debug-Symbolen sowie Debug-Code befreit und auf Leistung optimiert.
debug
Dieser Build läuft mit allen Debug-Informationen, einschließlich Symbolen, Assertions und #ifdef DEBUG-Blöcken.
Dadurch sind Binärdateien dieses Builds voraussichtlich langsam.
Hinweis: Die speziellen Debug-Defines werden für diesen Build nicht automatisch gesetzt.
relassert
Dieser Build löst die Codeblöcke #ifdef DEBUG nicht aus, hat aber weiterhin Debug-Symbole, mit denen sich die Ausführung mit Zeilennummern schrittweise verfolgen lässt, und D_ASSERT-Zeilen werden weiterhin geprüft.
Binärdateien dieses Build-Modus sind deutlich schneller als die des Modus debug.
reldebug
Dieser Build ähnelt relassert in vielerlei Hinsicht, nur Assertions sind hier ebenfalls entfernt.
benchmark
Dieser Build ist eine Kurzform für release mit gesetztem BUILD_BENCHMARK=1.
tidy-check
Damit wird ein Build erzeugt und anschließend Clang-Tidy ausgeführt, um Probleme oder Stilverletzungen per statischer Analyse zu finden. Die CI führt diese Prüfung ebenfalls aus und schlägt fehl, wenn die Prüfung fehlschlägt.
format-fix | format-changes | format-main
Das erzeugt keinen Build, sondern prüft mit den folgenden Format-Checkern auf Stilprobleme:
- clang-format behebt Formatprobleme im Code.
- cmake-format behebt Formatprobleme in den Dateien
CMakeLists.txt.
Die CI führt diese Prüfung ebenfalls aus und schlägt fehl, wenn die Prüfung fehlschlägt.
Auswahl der Erweiterungen
DuckDB-Kern-Erweiterungen sind die vom DuckDB-Team gepflegten Erweiterungen. Sie liegen in der GitHub-Organisation duckdb und werden vom Erweiterungs-Repository core ausgeliefert.
Weitere Erweiterungen lassen sich über das Flag BUILD_EXTENSIONS als Teil von DuckDB bauen, indem Sie die Namen der zu bauenden Erweiterungen angeben.
BUILD_EXTENSIONS='tpch;httpfs;fts;json;parquet' makeMehr dazu unter DuckDB-Erweiterungen bauen.
Paket-Flags
Für jedes Paket, das vom DuckDB-Kern gepflegt wird, gibt es im Makefile ein Flag, um das Bauen des Pakets zu aktivieren.
Diese Flags können Sie entweder in der aktuellen env setzen, über Setup-Dateien wie bashrc oder zshrc, oder vor dem Aufruf von make, zum Beispiel:
BUILD_PYTHON=1 make debugBUILD_PYTHON
Ist dieses Flag gesetzt, wird das Python-Paket gebaut.
BUILD_SHELL
Ist dieses Flag gesetzt, wird die CLI gebaut; das ist in der Regel standardmäßig aktiviert.
BUILD_BENCHMARK
Ist dieses Flag gesetzt, wird die hauseigene Benchmark-Suite von DuckDB gebaut. Weitere Informationen finden Sie im README.
BUILD_JDBC
Ist dieses Flag gesetzt, wird das Java-Paket gebaut.
BUILD_ODBC
Ist dieses Flag gesetzt, wird das ODBC-Paket gebaut.
Weitere Flags
DISABLE_UNITY
Um die Kompilierzeit zu verkürzen, nutzen wir Unity Build, um Übersetzungseinheiten zusammenzufassen. Das kann jedoch Include-Fehler verdecken. Dieses Flag schaltet den Unity Build aus, damit solche Fehler erkannt werden.
DISABLE_SANITIZER
In manchen Situationen wird das Ausführen einer mit Sanitizern gebauten Binärdatei nicht unterstützt oder verursacht Probleme. Julia ist ein Beispiel dafür. Mit diesem Flag werden die Sanitizer für den Build deaktiviert.
Git-Hash und Version überschreiben
Git-Hash und Version lassen sich beim Bauen aus dem Quellcode mit der Umgebungsvariable OVERRIDE_GIT_DESCRIBE überschreiben.
Das ist nützlich, wenn aus Quellen gebaut wird, die nicht Teil eines vollständigen Git-Repositorys sind (z. B. eine Archivdatei ohne Informationen zu Commit-Hashes und Tags).
Zum Beispiel:
OVERRIDE_GIT_DESCRIBE=v0.10.0-843-g09ea97d0a9 GEN=ninja makeErgibt beim Ausführen von ./build/release/duckdb die folgende Ausgabe:
v0.10.1-dev843 09ea97d0a9...