Qt Quick Compiler

Qt Quick Compiler 를 사용하면 런타임이 아닌 컴파일 타임에 QML 및 JavaScript 코드를 처리할 수 있습니다. 이를 통해 다음을 수행할 수 있습니다:

  • 더 빠른 애플리케이션 시작
  • 더 빠른 바인딩 및 함수 평가

Qt Quick Compiler 은 두 가지 구성 요소로 이루어져 있습니다:

참고: qmltc, qmlscqmlcachegen은 내부 빌드 도구입니다. 이러한 호출에 신경을 써야 한다면 빌드 시스템을 작성 중이거나 뭔가 잘못하고 있는 것입니다.

QML 유형 컴파일러

QML 타입 컴파일러 (qmltc )는 QML 타입을 C++ 클래스로 컴파일합니다. 그런 다음 이러한 C++ 클래스를 애플리케이션에 추가하고 다른 C++ 코드에서 인스턴스화할 수 있습니다. 이렇게 하면 QQmlComponent 을 사용하여 QML 유형의 인스턴스를 생성하는 데 따르는 많은 오버헤드를 피할 수 있습니다. qmltc의 이점을 활용하려면 C++ 코드를 수정하고 새 클래스를 사용해야 합니다.

qmltc는 구조를 완전히 이해하는 경우에만 QML 문서를 컴파일할 수 있습니다. 지원되지 않는 언어 기능을 만나면 실패합니다. 하지만 바인딩 및 함수의 JavaScript 코드를 이해할 필요는 없습니다.

QML 스크립트 컴파일러

QML 스크립트 컴파일러(qmlscqmlcachegen)는 바인딩과 함수를 효율적인 바이트 코드와 C++ 함수 둘 다로 컴파일합니다. 이 프로세스는 qt_add_qml_module을 사용하여 QML 모듈을 지정하는 경우 백그라운드에서 자동으로 수행됩니다. QML 컴파일의 다양한 측면을 제어하는 데 사용할 수 있는 옵션에 대한 자세한 내용은 컴파일된 QML 소스 캐싱을 참조하십시오.

컴파일 시 각 QML 또는 JavaScript 문서에 대해 해당 C++ 파일이 생성되어 애플리케이션에 빌드됩니다. 그런 다음 C++ 파일에는 다음과 같이 구성된 QML 컴파일 단위가 포함됩니다:

  • 문서 구조의 효율적인 표현
  • 문서의 모든 함수와 바인딩에 대한 바이트 코드
  • 컴파일러가 완전히 이해하는 함수 및 바인딩에 대한 C++ 코드

그러면 QML 엔진은 런타임에 QML 또는 JavaScript 소스 코드를 컴파일하지 않고 대신 사전 빌드된 컴파일 유닛을 사용하여 QML 컴포넌트와 해당 함수 및 바인딩을 더 빠르게 로드합니다. C++로 컴파일된 함수와 바인딩도 더 빠르게 실행할 수 있습니다. 다른 바인딩과 함수는 바이트 코드에서 직접 해석되거나 런타임에 JIT 컴파일 단계를 통해 머신 코드로 컴파일됩니다. 컴파일 시에는 보다 복잡한 유형 분석이 수행될 수 있습니다. 따라서 생성된 C++ 코드는 일반적으로 JIT 컴파일 결과보다 더 효율적입니다.

C++로 컴파일할 수 있는 자바스크립트 구조체에는 제한이 있습니다. 이러한 제한 사항에 대한 자세한 내용은 JavaScript를 C++로 컴파일할 때의 제한 사항을 참조하세요. QML 프로젝트가 얼마나 잘 컴파일되는지에 대한 통계는 함수 및 바인딩 컴파일에 대한 통계 얻기 문서를 참조하세요.

Qt Quick Compiler 확장이 설치된 경우 qmlcachegen 대신qmlsc가 사용됩니다. qmlcachegen에 비해 다음과 같은 추가 기능이 있습니다:

  • 직접 모드에서 문서를 컴파일할 수 있습니다. 이 경우 다른 QML 컴포넌트의 기반이 되는 유형의 C++ 헤더가 직접 포함되고 해당 유형의 메서드가 직접 호출됩니다. 반대로 간접 모드에서는 인터프리터와 JIT에서도 사용되는 룩업 메커니즘을 통해 qmlcachegen 또는 qmlsc 메서드를 호출합니다.
  • 정적 모드에서는 문서를 컴파일할 수 있습니다. 이 경우 qmlsc는 C++에 노출된 모든 유형의 프로퍼티가 파생 유형에 의해 섀도잉될 수 없다고 가정합니다. 이렇게 하면 더 많은 바인딩과 함수를 컴파일할 수 있지만 프로퍼티가 섀도 처리된 경우 잘못된 코드가 생성됩니다.

출력으로 C++를 생성하는 대신 qmlscqmlcachegen은.qmlc, .jsc 및 .mjsc "캐시 파일"을 생성할 수도 있습니다. 이러한 파일에는 각각 QML 컴파일 단위가 포함되어 있으며, 재컴파일을 피하기 위해 QML 엔진에서 로드할 수 있습니다. 하지만 문서 구조와 바이트 코드만 포함할 수 있습니다. 캐시 파일이 생성되면 C++에 대한 바인딩 및 함수 컴파일이 생략됩니다. Qt에서 제공하는 CMake나 qmake 빌드 시스템 모두 이 기능을 노출하지 않습니다.

요약

다음 표는 qmltc, qmlcachegenqmlsc의 차이점을 요약한 것입니다:

qmltcqmlcachegenqmlsc
QML 유형을 C++ 클래스로 컴파일QML 문서를 QML 컴파일 단위로 컴파일합니다.QML 문서를 QML 컴파일 단위로 컴파일합니다.
생성된 출력은 QQmlComponent-기반 객체 생성에 대한 빠른 대안으로 작동합니다.생성된 출력은 재컴파일을 피하고 실행 속도를 높이기 위해 QML 엔진에서 내부적으로 사용됩니다.생성된 출력은 재컴파일을 피하고 실행 속도를 높이기 위해 QML 엔진 내부에서 사용됩니다. 다이렉트 모드와 스태틱 모드를 사용하면 애플리케이션 속도를 더욱 높일 수 있습니다.
모든 버전의 Qt에서 사용 가능모든 버전의 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.