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) 를 호출하는 규칙을 생성합니다. 각 입력 파일마다 빌드 디렉터리에 출력 파일이 생성됩니다.
타깃 기반 서명을 사용할 경우, 생성된 파일들은 <TARGET> 의 소스로 추가됩니다. 구형 서명을 사용할 경우, 생성된 파일의 경로들이 <VAR> 에 추가됩니다.
참고: 이는 저수준 매크로입니다. moc 를 사용하여 소스 파일을 처리하는 더 편리한 방법은 CMake AUTOMOC 문서를 참조하십시오.
인수
TARGET 을 명시적으로 설정할 수 있습니다. 이렇게 하면 moc 로 소스 파일을 스캔할 때 대상 속성 INCLUDE_DIRECTORIES 및 COMPILE_DEFINITIONS 도 함께 사용됩니다.
Qt 6.8부터는 타깃에 대한 .moc 파일을 생성하기 위해 헤더 파일 대신 소스 파일을 qt_wrap_cpp 에 전달할 경우, 소스 파일 내에서 생성된 .moc 파일에 대한 올바른 포함 경로를 설정하기 위해 TARGET 매개변수가 필요합니다.
타깃의 디렉터리 범위와 다른 디렉터리 범위에서 qt_wrap_cpp 를 호출하는 경우, qt_wrap_cpp 의 타깃 기반 시그니처를 사용하거나 TARGET 인수를 통해 타깃을 전달해야 합니다.
moc 호출에 추가되어야 할 추가 OPTIONS 를 설정할 수 있습니다. 사용 가능한 옵션은 moc 문서에서 확인할 수 있습니다.
` OPTIONS `는 ` TARGET `가 설정된 경우 생성자 표현식을 평가할 수 있습니다.
참고: 생성자 표현식( 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`를 사용하여 ` COMPILE_DEFINITIONS `를 설정하며, 이 값은 ` OPTIONS`에 추가됩니다.
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)>")© 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.