QT_WRAP_CPP
소스에서 .moc 파일을 생성합니다.
이 명령은 Qt6
패키지의 Core
컴포넌트에 정의되어 있으며, 다음과 같이 로드할 수 있습니다:
find_package(Qt6 REQUIRED COMPONENTS Core)
이 명령은 Qt 5.0에 도입되었습니다.
시놉시스
qt_wrap_cpp
는 두 가지 서명을 지원합니다. 첫 번째 서명은 Qt 6.8에 추가되었으며 다음과 같은 형식을 갖습니다:
qt_wrap_cpp(<TARGET> src_file1 [src_file2 ...] [OPTIONS ...] [DEPENDS ...])
참고: 위의 서명은 이전 서명보다 권장됩니다.
qt_wrap_cpp(<VAR> src_file1 [src_file2 ...] [TARGET target] [OPTIONS ...] [DEPENDS ...])
버전 없는 명령이 비활성화되어 있으면 qt6_wrap_cpp()
을 대신 사용합니다. 이 명령과 동일한 인수 집합을 지원합니다.
설명
지정된 소스 파일에서 Meta-Object Compiler (moc) 를 호출하기 위한 규칙을 만듭니다. 각 입력 파일에 대해 빌드 디렉터리에 출력 파일이 생성됩니다. 생성된 파일의 경로는 <VAR>
에 추가됩니다.
참고: 이것은 저수준 매크로입니다. 소스 파일을 moc
로 처리하는 더 편리한 방법은 CMake AUTOMOC 문서를 참조하세요.
인수
명시적으로 TARGET
을 설정할 수 있습니다. 이렇게 하면 moc
로 소스 파일을 검사할 때 대상 속성 INCLUDE_DIRECTORIES
과 COMPILE_DEFINITIONS
도 사용되도록 할 수 있습니다.
Qt 6.8부터 소스 파일을 헤더 파일 대신 qt_wrap_cpp
로 전달하여 대상에 대한 .moc
파일을 생성하는 경우, 소스 파일에 생성된 .moc
파일의 올바른 포함 경로를 설정하려면 TARGET
파라미터가 필요합니다. 생성된 .moc
파일은 qt_wrap_cpp
에 의해 대상의 소스에 추가되므로 <VAR>
에는 추가되지 않습니다.
moc
호출에 추가해야 하는 OPTIONS
을 추가로 설정할 수 있습니다. 가능한 옵션은 moc 문서에서 찾을 수 있습니다.
TARGET
이 설정된 경우 OPTIONS
은 제너레이터 표현식을 평가할 수 있습니다.
참고: OPTIONS
에 제너레이터 표현식과 특수 문자가 모두 포함된 경우 변수를 사용하여 구현하세요. 예를 들어 >
, ,
및 :
대신 $<ANGLE-R>
, $<COMMA>
및 $<SEMICOLON>
를 사용합니다. 그렇지 않으면 제너레이터 표현식이 올바르게 평가되지 않습니다. OPTIONS
은 제너레이터 표현식으로 래핑되어 있으므로 특수 문자를 이스케이프 처리해야 합니다.
DEPENDS
를 사용하면 생성된 파일의 재생성을 위한 추가 종속성을 추가할 수 있습니다. Q_PLUGIN_METADATA () 매크로를 사용하는 .json
파일을 포함하는 Qt 플러그인 코드와 같이 소스에 암시적 종속성이 있는 경우에 유용합니다.
예제
Qt 6.8 이후:
qt_add_executable(myapp myapp.cpp main.cpp) qt_wrap_cpp(myapp myapp.cpp)
// myapp.cpp #include "myapp.h" #include <QObject> class MyApp : public QObject { Q_OBJECT public: MyApp() = default; }; #include "myapp.moc"
위 파일에서 myapp.moc
은 myapp.cpp
에 포함되어 있습니다. myapp.moc
파일을 생성하기 위해 qt_wrap_cpp
매크로는 TARGET
매개변수와 함께 사용됩니다. .moc
파일과 그 경로는 qt_wrap_cpp
매크로에 의해 대상의 소스에 추가되고 디렉터리를 포함합니다.
이전 버전:
set(SOURCES myapp.cpp main.cpp) qt_wrap_cpp(SOURCES myapp.h) qt_add_executable(myapp ${SOURCES})
다음 예제에서는 TARGET
이 설정되어 있으므로 OPTIONS
에 전달된 생성기 표현식이 평가됩니다. 인수는 제너레이터 표현식의 구문 오류를 방지하기 위해 이러한 방식으로 지정됩니다.
set(SOURCES myapp.cpp main.cpp) qt_wrap_cpp(SOURCES myapp.h TARGET myapp OPTIONS "$<$<CONFIG:Debug>:-DMY_OPTION_FOR_DEBUG>" "-DDEFINE_CMDLINE_SIGNAL=void cmdlineSignal(const QMap<int, int> &i)" "$<$<CONFIG:Debug>:-DDEFINE_CMDLINE_SIGNAL_IN_GENEX=void cmdlineSignal(const QMap<int$<COMMA> int$<ANGLE-R> &i)>") qt_add_executable(myapp ${SOURCES})
다음 예제에서는 target_compile_definitions를 사용하여 OPTIONS
에 추가될 COMPILE_DEFINITIONS를 설정합니다.
set(SOURCES myapp.cpp main.cpp) qt_wrap_cpp(SOURCES myapp.h TARGET myapp) qt_add_executable(myapp ${SOURCES}) target_compile_definitions(myapp PRIVATE "$<$<CONFIG:Debug>:MY_OPTION_FOR_DEBUG>" "DEFINE_CMDLINE_SIGNAL=void cmdlineSignal(const QMap<int, int> &i)" "$<$<BOOL:TRUE>:DEFINE_CMDLINE_SIGNAL_IN_GENEX=void cmdlineSignal(const QMap<int$<COMMA> int$<ANGLE-R> &i)>")
© 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.