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_DIRECTORIES
和 COMPILE_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. 的商标。所有其他商标均为其各自所有者的财产。