qt_wrap_cpp

从源文件创建 .moc 文件。

此命令在 Qt6 包的 Core 组件中定义,可以通过以下方式加载:

find_package(Qt6 REQUIRED COMPONENTS Core)

此命令在 Qt 5.0 中引入。

概要

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

如果禁用了 版本无关命令,请使用 qt6_wrap_cpp() 代替。它支持与此命令相同的参数集。

描述

为在给定源文件上调用 元对象编译器 (moc) 创建规则。对于每个输入文件,在构建目录中生成一个输出文件。生成的文件路径将添加到 <VAR>

注意:这是一个低级宏。请参阅 CMake AUTOMOC 文档 以获得一个更方便的方法,让源文件通过 moc 处理。

参数

您可以设置一个显式的 TARGET。这将确保在通过 moc 稍微源文件时也使用目标属性 INCLUDE_DIRECTORIESCOMPILE_DEFINITIONS

您可以设置额外的 OPTIONS,应将其添加到 moc 调用中。您可以在 moc 文档 中找到可能的选项。

当设置 TARGET 时,OPTIONS 可以评估生成器表达式。

注意:如果 OPTIONS 包含生成器表达式和特殊字符,请使用变量来实现它们。例如,使用 $<ANGLE-R>$<COMMA>$<SEMICOLON> 而不是 >,:。否则,生成器表达式将无法正确评估。由于 OPTIONS 被生成器表达式包裹,您必须在其中转义特殊字符。

DEPENDS 允许您为生成文件的重新创建添加额外的依赖关系。当源文件具有隐式依赖关系时,此功能很有用,例如,对于使用 Q_PLUGIN_METADATA() 宏包含 .json 文件的 Qt 插件。

示例

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

© 2024 The Qt Company Ltd. 本文档中包含的文档贡献均为各自所有者的版权。提供的文档根据自由软件基金会发布的,经批准的 GNU自由文档许可版本1.3 许可。Qt及其相关商标是芬兰及/或其他国家The Qt Company Ltd. 的商标。所有其他商标均为其各自所有者的财产。