최적화된 Qt 빌드하기

이 페이지에서는 특정 요구 사항에 따라 더 작은 맞춤형 버전의 Qt를 구성하고 빌드하는 과정을 설명합니다.

1단계: 소스 가져오기, 빌드 요구 사항 및 환경 설정 설치하기

소스 가져오기, 종속성 설치 및 환경 설정에 대해서는 플랫폼별 지침을 참조하십시오:

2단계: Qt 라이브러리 및 도구 빌드하기

플랫폼별 지침을 따르고 다음 Qt 구성 옵션을 사용하여 필요에 최적화된 빌드를 생성합니다.

다음 표에서는 빌드 크기를 줄이는 데 도움이 되는 구성 옵션에 대해 자세히 설명합니다.

Qt 구성 옵션설명
-static정적 링크를 위한 아카이브 파일을 생성합니다. 정적 바이너리는 실행 파일 자체에 포함된 모든 필수 라이브러리 및 종속성과 링크됩니다. 즉, 프로그램을 실행할 때 외부 라이브러리에 의존하지 않고 필요한 라이브러리의 자체 내부 복사본을 사용합니다. 따라서 링커는 바이너리 코드의 불필요한 부분을 삭제할 수 있습니다. 이는 단일 실행 파일 전달에 가장 최적화된 솔루션입니다.
-ltcg링크 시간 최적화(LTO)는 링크 단계에서 바이너리 코드를 분석하고 최적화하여 성능을 크게 향상시키고 실행 파일의 크기를 줄일 수 있는 강력한 기술입니다.
-내보내기 줄이기내보내는 심볼의 양을 줄입니다.
-gc-binaries바이너리에서 불필요한 부분을 제거합니다. 각 함수나 데이터 항목을 자체 섹션에 배치하고 사용하지 않는 섹션의 링커 가비지 수집을 활성화합니다.
-submodules qtbase,qtdeclarative,qtqmlscriptcompiler,qtsvg컴파일할 서브모듈. 불필요한 기능에 대한 종속성을 제한합니다.
-skip qtlanguageserver,qtquicktimeline컴파일에서 자동으로 포함된 서브모듈을 제거합니다. 불필요한 기능에 대한 종속성을 제한합니다.
-disable-deprecated-<버전>까지더 이상 사용되지 않는 구현을 제거합니다.

QT_DISABLE_DEPRECATED_UP_TO 값을 <버전>으로 설정합니다. QT_DISABLE_DEPRECATED_UP_TO 은 API와 ABI 모두에서 더 이상 사용되지 않는 메서드를 제거하는 데 사용됩니다. <버전>은 16진수 값입니다. 예를 들어 0x070000을 사용하면 Qt 7.0.0 이하 릴리스에서 더 이상 사용되지 않는 모든 코드를 제거할 수 있습니다. 기본적으로 <version>은 Windows와 비 Windows에서 각각 0x040000 및 0x050000으로 설정됩니다.

또한 기능 포함 또는 제외에 설명된 대로 기능을 하나씩 제거할 수 있습니다. 이로 인해 사용 가능한 구성 요소 및 기능이 제한될 수 있습니다. 모든 조합이 테스트되는 것은 아닙니다. Qt는 지속적 통합(CI)에서 특정 구성 옵션 조합을 테스트합니다. 이 구성 옵션 조합은 간단한 QML 응용 프로그램을 실행할 수 있습니다.

Qt configure 명령은 - - (더블 대시) 명령줄 파라미터를 지원하여 -DCMAKE_CXX_FLAGS="-march=native"와 같은 추가 CMake 인수를 삽입할 수 있습니다. 교차 컴파일의 경우 이러한 매개변수는 예제 툴체인 파일에 설명된 대로 -DCMAKE_TOOLCHAIN_FILE=path/to/toolchain.cmake를 통해 추가할 수 있습니다. 다음 표에는 GCC와 함께 사용할 수 있는 몇 가지 옵션이 나와 있습니다:

컴파일러 옵션설명
-march <아치>대상 아키텍처. 애플리케이션이 컴파일된 아키텍처와 동일한 아키텍처에서 실행되는 경우 "네이티브"를 사용합니다.
-mtune <튠>컴파일러가 명령어 집합, 레지스터 수, 캐시 계층 구조 등 지정된 프로세서 아키텍처의 특성을 활용하는 코드를 생성하도록 지시합니다.
-fno-asynchronous-unwind-tables바이너리 크기를 줄입니다. 비동기 언와인드 테이블을 비활성화하면 코드의 성능, 호환성 및 유지 관리에 영향을 미칠 수 있다는 점에 유의하세요. 일반적으로 이 옵션은 잠재적인 영향을 신중하게 고려한 후 필요한 경우에만 사용하는 것이 좋습니다.
-fno-unwind-tables바이너리 크기를 줄입니다. 테이블 언와인드를 비활성화하면 코드의 성능, 호환성 및 유지 관리에 영향을 미칠 수 있다는 점에 유의하세요. 일반적으로 이 옵션은 잠재적인 영향을 신중하게 고려한 후 필요한 경우에만 사용하는 것이 좋습니다.

-fno-unwind-tables 은 테이블 언와인드 생성을 완전히 비활성화하는 반면, -fno-asynchronous-unwind-tables 은 테이블 언와인드의 비동기 생성만 비활성화하므로 보다 적극적인 버전이라는 점에 유의할 필요가 있습니다.

-fomit-frame-pointer바이너리 크기를 줄입니다. 이 옵션을 활성화하면 컴파일러는 각 함수 호출에 대해 스택에 프레임 포인터를 저장하지 않습니다. 대신 스택 포인터를 프레임 포인터로 사용하므로 메모리를 절약하고 성능을 향상시킬 수 있습니다. GCC 및 Clang과 같은 일부 컴파일러는 ARM 및 PowerPC와 같은 특정 아키텍처 또는 특정 최적화 모드에서 컴파일할 때 기본적으로 -fomit-frame-pointer 을 활성화한다는 점에 주목할 필요가 있습니다.
-fno-exceptions바이너리 크기를 줄입니다. 이 옵션을 활성화하면 컴파일러는 try-catch 블록에 대한 코드를 생성하지 않으며 예외를 던지거나 잡으려는 시도는 런타임 오류를 발생시킵니다. Qt 자체는 예외 없이 작동하지만 일부 종속성에는 예외가 필요할 수 있습니다.
-no-pie바이너리 크기를 줄입니다. 일반적으로 -fno-pie 은 컴파일된 코드의 호환성 및 성능에 영향을 미칠 수 있으므로 필요한 경우에만 주의해서 사용해야 합니다. 위치 독립 실행 파일은 또한 보안을 강화합니다. 위치 독립 코드에 대한 자세한 내용은 위키백과에서 주소 공간 레이아웃 무작위화를 참조하세요.

다음 표에는 링커 옵션이 나열되어 있습니다:

링커 옵션설명
-no-pie바이너리 크기를 줄입니다. 일반적으로 -fno-pie 은 컴파일된 코드의 호환성 및 성능에 영향을 미칠 수 있으므로 필요한 경우에만 주의해서 사용해야 합니다. 위치 독립 실행 파일은 또한 보안을 강화합니다. 위치 독립 코드에 대한 자세한 내용은 위키백과에서 주소 공간 레이아웃 무작위화를 참조하세요.

3단계: 애플리케이션 빌드하기

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 버전 추가하기를 참조하세요.

명령줄을 사용하여 애플리케이션을 빌드하는 경우 플랫폼별 가이드를 따르세요.

© 2025 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.