qt_wrap_cpp

Creates .moc files from sources.

命令的定义在 核心 组件对于 Qt6 包,可以像这样加载:

find_package(Qt6 REQUIRED COMPONENTS Core)
					

该命令在 Qt 5.0 引入。

概要

qt_wrap_cpp(<VAR> src_file1 [src_file2 ...]
            [TARGET target]
            [OPTIONS ...]
            [DEPENDS ...])
					

无版本命令 被禁用,使用 qt6_wrap_cpp() 代替。它支持如此命令的一组相同自变量。

描述

Creates rules for calling the MOC (元对象编译器) on the given source files. For each input file, an output file is generated in the build directory. The paths of the generated files are added to <VAR> .

注意: This is a low-level macro. See the CMake AUTOMOC Documentation for a more convenient way to let source files be processed with moc .

自变量

可以明确设置 TARGET . This will make sure that the target properties INCLUDE_DIRECTORIES and COMPILE_DEFINITIONS are also used when scanning the source files with moc .

可以设置额外 选项 应该被添加到 moc 调用。可以查找可能的选项在 moc documentation .

The 选项 can evaluate generator expressions when TARGET 有设置。

注意: 选项 include both generator expressions and special characters, use variables to implement them. For example, use $<ANGLE-R> , $<COMMA> and $<SEMICOLON> 而不是 > , , and : . Otherwise, the generator expression will not be evaluated correctly. 选项 are wrapped in generator expressions, so you must escape special characters in them.

DEPENDS allows you to add additional dependencies for recreation of the generated files. This is useful when the sources have implicit dependencies, like code for a Qt plugin that includes a .json 文件使用 Q_PLUGIN_METADATA () 宏。

范例

set(SOURCES myapp.cpp main.cpp)
qt_wrap_cpp(SOURCES myapp.h)
qt_add_executable(myapp ${SOURCES})
					

In the following example, the generator expressions passed to 选项 will be evaluated since TARGET is set. The argument is specified this way to avoid syntax errors in the generator expressions.

set(SOURCES myapp.cpp main.cpp)
qt_wrap_cpp(SOURCES myapp.h
            TARGET myapp
            选项
            "$<$<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})
					

The following example uses target_compile_definitions to set COMPILE_DEFINITIONS which will be added to 选项 .

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)>")