빌드 구성

빌드 구성

DuckDB는 다양한 설정에서 빌드할 수 있어요. 대부분은 CMake에 직접 대응하지만 전부는 아니에요. 빌드 타입과 패키지 플래그, 확장 선택 방법을 살펴볼게요.

출처: 문서

본문

빌드 타입

DuckDB는 다양한 설정에서 빌드할 수 있어요. 대부분은 CMake에 직접 대응하지만 전부는 아니에요.

release

이 빌드는 모든 assertion과 디버그 심볼 및 코드가 제거되고, 성능을 위해 최적화돼요.

debug

이 빌드는 심볼, assertion, #ifdef DEBUG 블록을 포함한 모든 디버그 정보로 실행돼요. 이로 인해 이 빌드의 바이너리는 느릴 것으로 예상돼요. 주의: 특수 디버그 정의는 이 빌드에서 자동으로 설정되지 않아요.

relassert

이 빌드는 #ifdef DEBUG 코드 블록을 트리거하지 않지만, 줄 번호 정보로 실행을 단계별로 살펴볼 수 있게 해주는 디버그 심볼을 여전히 가지고 있고 D_ASSERT 줄은 이 빌드에서 여전히 검사돼요. 이 빌드 모드의 바이너리는 debug 모드보다 훨씬 빠르게요.

reldebug

이 빌드는 여러 면에서 relassert와 유사하지만, 이 빌드에서는 assertion도 제거돼요.

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 확장 저장소에서 제공돼요.

추가 확장은 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

어떤 상황에서는 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
...

더 알아보기 (Learn more)