최적화된 Qt 빌드
이 페이지에서는 사용자의 구체적인 요구 사항에 맞춰 더 작고 맞춤형인 Qt 버전을 구성하고 빌드하는 과정을 설명합니다.
1단계: 소스 코드 확보, 빌드 필수 요소 설치 및 환경 설정
소스 코드 확보, 종속성 설치 및 환경 설정에 대해서는 플랫폼별 지침을 참조하십시오.
- Windows용 Qt - 소스 코드로부터 빌드하기
- macOS용 Qt - 소스 코드로부터 빌드하기
- Linux용 Qt - 소스 코드로부터 빌드하기
- 임베디드 리눅스 장치 구성
- Android용 Qt - 소스 코드 빌드
- iOS용 Qt - 소스 코드 빌드
2단계: Qt 라이브러리 및 도구 빌드
플랫폼별 지침을 따르고 다음 Qt 구성 옵션을 사용하여 필요에 맞게 최적화된 빌드를 생성하십시오.
다음 표에서는 빌드 크기를 줄이는 데 도움이 되는 configure 옵션에 대해 더 자세히 설명합니다.
| Qt configure 옵션 | 설명 |
|---|---|
| -static | 정적 링크용 아카이브 파일을 생성합니다. 정적 바이너리는 실행 파일 자체에 필요한 모든 라이브러리와 종속성이 내장된 상태로 링크됩니다. 즉, 프로그램을 실행할 때 외부 라이브러리에 의존하지 않고 필요한 라이브러리의 자체 내부 사본을 사용합니다. 이를 통해 링커는 바이너리 코드의 불필요한 부분을 제거할 수 있습니다. 이는 단일 실행 파일로 배포할 때 가장 적합한 솔루션입니다. |
| -ltcg | 링크 시간 최적화(LTO)는 링크 단계에서 바이너리 코드를 분석하고 최적화하여 실행 파일의 성능을 크게 향상시키고 크기를 줄일 수 있는 강력한 기술입니다. |
| -reduce-exports | 내보내지는 심볼의 수를 줄입니다. |
| -gc-binaries | 바이너리에서 불필요한 부분을 제거합니다. 각 함수나 데이터 항목을 별도의 섹션에 배치하고, 사용되지 않는 섹션에 대해 링커 가비지 컬렉션을 활성화합니다. |
| -submodules qtbase,qtdeclarative,qtqmlscriptcompiler,qtsvg | 컴파일할 하위 모듈. 불필요한 기능에 대한 의존성을 제한합니다. |
| -skip qtlanguageserver,qtquicktimeline | 컴파일 과정에서 자동으로 포함되는 서브모듈을 제거합니다. 의존성을 불필요한 기능으로만 제한합니다. |
| -disable-deprecated-up-to <버전> | 사용 중단된 구현을 제거합니다. QT_DISABLE_DEPRECATED_UP_TO 값을 <version>으로 설정합니다. QT_DISABLE_DEPRECATED_UP_TO 은 API와 ABI 모두에서 더 이상 사용되지 않는 메서드를 제거하는 데 사용됩니다. <version>은 16진수 값입니다. 예를 들어, Qt 7.0.0 또는 그 이전 릴리스에서 사용 중단된 모든 코드를 제거하려면 0x070000을 사용합니다. 기본적으로 <version>은 Windows에서는 0x040000으로, Windows 이외의 환경에서는 0x050000으로 설정됩니다. |
또한, ‘기능 포함 또는 제외’에 설명된 대로 기능을 하나씩 제거할 수 있습니다. 이 경우 사용 가능한 구성 요소 및 기능에 제한이 발생할 수 있습니다. 모든 조합이 테스트된 것은 아닙니다. Qt Test는 지속적 통합(CI) 시스템에서 특정 최소 구성 옵션 조합을 테스트합니다. 즉, 극도로 최소화된 임베디드 리눅스 구성을 테스트하고, 다른 플랫폼의 경우 그보다 약간 덜 최소화된 구성을 테스트합니다. 이러한 구성은 Quick 애플리케이션을 실행하기 위한 것입니다.
Qt configure 명령어는 -- (더블 대시) 명령줄 매개변수도 지원하며, 이를 통해 사용자는 -DCMAKE_CXX_FLAGS="-march=native"와 같은 추가 CMake 인수를 삽입할 수 있습니다. 크로스 컴파일의 경우, ‘툴체인 파일 예시’에 설명된 대로 -DCMAKE_TOOLCHAIN_FILE=path/to/toolchain.cmake를 통해 이러한 매개변수를 추가할 수 있습니다. 다음 표에는 GCC와 함께 사용할 수 있는 몇 가지 옵션이 나열되어 있습니다:
| 컴파일러 옵션 | 설명 |
|---|---|
| -march <arch> | 대상 아키텍처. 애플리케이션이 컴파일된 아키텍처와 동일한 아키텍처에서 실행되는 경우 "native"를 사용합니다. |
| -mtune <tune> | 컴파일러가 지정된 프로세서 아키텍처의 특성(예: 명령어 세트, 레지스터 수, 캐시 계층 구조 등)을 활용하는 코드를 생성하도록 지시합니다. |
| -fno-asynchronous-unwind-tables | 바이너리 크기를 줄입니다. 비동기 언와인드 테이블을 비활성화하면 코드의 성능, 호환성 및 유지 관리성에 영향을 미칠 수 있음을 유의하십시오. 일반적으로 이 옵션은 잠재적인 영향을 신중하게 고려한 후, 필요한 경우에만 사용하는 것이 권장됩니다. |
| -fno-unwind-tables | 바이너리 크기를 줄입니다. 언와인드 테이블을 비활성화하면 코드의 성능, 호환성 및 유지 관리성에 영향을 미칠 수 있음을 유의하십시오. 일반적으로 이 옵션은 잠재적인 영향을 신중하게 고려한 후, 필요한 경우에만 사용하는 것이 권장됩니다.
|
| -fomit-frame-pointer | 바이너리 크기를 줄여줍니다. 이 옵션을 활성화하면 컴파일러는 각 함수 호출마다 스택에 프레임 포인터를 저장하지 않습니다. 대신 스택 포인터를 프레임 포인터로 사용하므로 메모리를 절약하고 성능을 향상시킬 수 있습니다. GCC나 Clang과 같은 일부 컴파일러는 ARM이나 PowerPC와 같은 특정 아키텍처용으로 컴파일하거나 특정 최적화 모드에서 기본적으로 ` -fomit-frame-pointer `를 활성화한다는 점에 유의해야 합니다. |
| -fno-exceptions | 바이너리 크기를 줄여줍니다. 이 옵션을 활성화하면 컴파일러는 try-catch 블록에 대한 코드를 생성하지 않으며, 예외를 발생시키거나 처리하려는 모든 시도는 런타임 오류로 이어집니다. Qt 자체는 예외 없이도 작동하지만, 일부 종속성에서는 예외 처리가 필요할 수 있습니다. |
| -no-pie | 바이너리 크기를 줄입니다. 일반적으로 위치 독립형 실행 파일( -fno-pie )은 컴파일된 코드의 호환성과 성능에 영향을 미칠 수 있으므로, 필요한 경우에만 신중하게 사용해야 합니다. 위치 독립형 실행 파일은 보안성도 강화합니다. 위치 독립형 코드에 대한 자세한 내용은 위키백과의 ‘주소 공간 배열 무작위화(Address Space Layout Randomization )’ 항목을 참조하십시오. |
다음 표에는 링커 옵션이 나열되어 있습니다:
| 링크어 옵션 | 설명 |
|---|---|
| -no-pie | 바이너리 크기를 줄입니다. 일반적으로 위치 독립 실행 파일( -fno-pie )은 컴파일된 코드의 호환성과 성능에 영향을 미칠 수 있으므로, 필요한 경우에만 신중하게 사용해야 합니다. 위치 독립 실행 파일은 보안성도 강화합니다. 위치 독립 코드에 대한 자세한 내용은 위키백과의 ‘주소 공간 배열 무작위화(Address Space Layout Randomization )’ 항목을 참조하십시오. |
3단계: 애플리케이션 빌드
Qt 설치가 완료되면 Qt를 사용하여 애플리케이션을 빌드할 수 있습니다.
CMake 프로젝트 명령어를 사용하여 QML 코드 생성을 최적화하십시오. QML 코드 생성에 대한 자세한 내용은 qt_add_qml_module 및 QML 및 위치 독립형 코드( Qt Quick ) 모범 사례를 참조하십시오.
다음 CMake 코드 스니펫에 있는 명령을 사용하면 바이너리 크기를 줄일 수 있습니다:
set_target_properties(
ExampleApp
PROPERTIES
QT_QMLCACHEGEN_ARGUMENTS "--only-bytecode"
)IDE에서 애플리케이션을 빌드할 계획이라면, 해당 IDE에 Qt 버전을 명시적으로 등록해야 합니다:
- Qt Creator 의 경우, Qt Creator: Qt 버전 추가를 참조하십시오.
- Qt Extension for Visual Studio Code 의 경우, Qt Extension for Visual Studio Code: Qt 설치 등록을 참조하십시오.
명령줄을 사용하여 애플리케이션을 빌드하는 경우, 플랫폼별 가이드를 따르십시오.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.