Note
最佳实践 不建议直接调用CMake,因为Makefile设置了一些对正确构建包至关重要的变量。
DuckDB 需要 CMake 和一个符合 C++11 标准的编译器(例如,GCC、Apple-Clang、MSVC)。 此外,我们推荐使用 Ninja 构建系统,它可以自动并行化构建过程。
安装Xcode和Homebrew。然后,使用以下命令安装所需的包:
brew install git cmake ninja
使用您的发行版的包管理器安装所需的包。
sudo apt-get update && sudo apt-get install -y git g++ cmake ninja-build libssl-dev
sudo yum install -y git g++ cmake ninja-build openssl-devel
apk add g++ git make cmake ninja
请注意,Alpine Linux 使用 musl libc 作为其 C 标准库。 没有为 musl libc 分发的官方二进制文件,但可以按照本页的说明手动构建 DuckDB。
克隆DuckDB仓库:
git clone https://github.com/duckdb/duckdb
我们建议创建存储库的完整克隆。请注意,该目录大约使用1.3 GB的磁盘空间。
要构建DuckDB,我们使用一个Makefile,它反过来调用CMake。我们还建议使用Ninja作为CMake的生成器。
GEN=ninja make
Note
最佳实践 不建议直接调用CMake,因为Makefile设置了一些对正确构建包至关重要的变量。
一旦构建成功完成,你可以在build
目录中找到duckdb
二进制文件:
build/release/duckdb
为了测试,构建带有静态链接核心扩展的DuckDB可能很有用。为此,请运行:
CORE_EXTENSIONS='autocomplete;httpfs;icu;json;tpch' GEN=ninja make
此选项还接受树外扩展:
CORE_EXTENSIONS='autocomplete;httpfs;icu;json;tpch;delta' GEN=ninja make
有关更多详细信息,请参阅“构建扩展”页面。
在Windows上,DuckDB需要Microsoft Visual C++ Redistributable包作为构建时和运行时的依赖项。请注意,与类UNIX系统上的构建过程不同,Windows构建直接调用CMake。
要在Windows上构建DuckDB,我们建议使用Visual Studio编译器。 要使用它,请按照CI工作流程中的说明操作:
python scripts/windows_ci.py
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_GENERATOR_PLATFORM=x64 \
-DENABLE_EXTENSION_AUTOLOADING=1 \
-DENABLE_EXTENSION_AUTOINSTALL=1 \
-DDUCKDB_EXTENSION_CONFIGS="${GITHUB_WORKSPACE}/.github/config/bundled_extensions.cmake" \
-DDISABLE_UNITY=1 \
-DOVERRIDE_GIT_DESCRIBE="$OVERRIDE_GIT_DESCRIBE"
cmake --build . --config Release --parallel
在Windows上,DuckDB也可以使用MSYS2和MinGW64进行构建。
请注意,此构建仅出于兼容性原因而支持,只有在给定平台上无法使用Visual Studio构建时才应使用。
要使用MinGW64构建DuckDB,请使用Pacman安装所需的依赖项。
当提示Enter a selection (default=all)
时,通过按Enter
选择默认选项。
pacman -Syu git mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja
git clone https://github.com/duckdb/duckdb
cd duckdb
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DBUILD_EXTENSIONS="icu;parquet;json"
cmake --build . --config Release
一旦构建成功完成,你可以在仓库的目录中找到 duckdb.exe
二进制文件:
./duckdb.exe
DuckDB 对 Android 有实验性支持。请使用 DuckDB 的最新 main
分支,而不是稳定版本。
我们提供了使用macOS和Android Studio的设置构建说明。对于其他设置,请相应地调整步骤。
打开 Android Studio。 选择 Tools 菜单并选择 SDK Manager。 选择 SDK Tools 选项卡并勾选 NDK (Side by side) 选项。 点击 OK 进行安装。
设置 Android NDK 的位置。例如:
ANDROID_NDK=~/Library/Android/sdk/ndk/28.0.12433566/
设置 Android ABI。例如:
ANDROID_ABI=arm64-v8a
或者:
ANDROID_ABI=x86_64
如果你想使用Ninja构建系统,请确保它已安装并在PATH
上可用。
设置要构建的DuckDB扩展列表。这些将静态链接到二进制文件中。例如:
DUCKDB_EXTENSIONS="icu;json;parquet"
导航到DuckDB的目录并按如下方式运行构建:
PLATFORM_NAME="android_${ANDROID_ABI}"
BUILDDIR=./build/${PLATFORM_NAME}
mkdir -p ${BUILDDIR}
cd ${BUILDDIR}
cmake \
-G "Ninja" \
-DEXTENSION_STATIC_BUILD=1 \
-DDUCKDB_EXTRA_LINK_FLAGS="-llog" \
-DBUILD_EXTENSIONS=${DUCKDB_EXTENSIONS} \
-DENABLE_EXTENSION_AUTOLOADING=1 \
-DENABLE_EXTENSION_AUTOINSTALL=1 \
-DCMAKE_VERBOSE_MAKEFILE=on \
-DANDROID_PLATFORM=${ANDROID_PLATFORM} \
-DLOCAL_EXTENSION_REPO="" \
-DOVERRIDE_GIT_DESCRIBE="" \
-DDUCKDB_EXPLICIT_PLATFORM=${PLATFORM_NAME} \
-DBUILD_UNITTESTS=0 \
-DBUILD_SHELL=1 \
-DANDROID_ABI=${ANDROID_ABI} \
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release ../..
cmake \
--build . \
--config Release
对于arm64-v8a
ABI,构建将生成build/android_arm64-v8a/duckdb
和build/android_arm64-v8a/src/libduckdb.so
二进制文件。
要在Termux应用程序中构建命令行客户端,请安装以下软件包:
pkg install -y git ninja clang cmake python3
克隆DuckDB仓库并按如下方式构建:
mkdir build
cd build
export LDFLAGS="-llog"
cmake \
-G "Ninja" \
-DBUILD_EXTENSIONS="" \
-DDUCKDB_EXPLICIT_PLATFORM=linux_arm64_android \
-DCMAKE_BUILD_TYPE=Release \
..
cmake --build . --config Release
请注意,您也可以使用Python客户端:
pip install --pre --upgrade duckdb
在32位的Raspberry Pi板上,你需要添加-latomic
链接标志。
由于此平台不分发扩展,建议在构建时也包含它们。
例如:
mkdir build
cd build
cmake .. \
-DCORE_EXTENSIONS="httpfs;json;parquet" \
-DDUCKDB_EXTRA_LINK_FLAGS="-latomic"
make -j4
Ninja 并行化构建,这可能会导致资源有限的系统出现内存不足的问题。
这些问题也报告在 Alpine Linux 上发生,尤其是在资源有限的机器上。
在这些情况下,通过将 Makefile 生成器设置为空(GEN=
)来避免使用 Ninja:
GEN= make