本页内容

qt_extract_metatypes

从 Qt 目标中提取元类型,并生成相应的 metatypes.json 文件。

该命令定义在Qt6 包的Core 组件中,可按如下方式加载:

find_package(Qt6 REQUIRED COMPONENTS Core)

该命令于 Qt 6.0 中引入。

语法

qt_extract_metatypes(target
    [MANUAL_MOC_JSON_FILES json_files...]
    [OUTPUT_FILES variable_name]
)

如果禁用了无版本号的命令,请改用qt6_extract_metatypes() 。它支持与本命令相同的参数集。

描述

某些操作依赖于在目标上生成的元类型信息。通常由 Qt 命令在内部处理,但在非此情况的场景下,可调用 `qt_extract_metatypes() ` 来强制为特定的 `target` 收集此类信息。

目标的源文件的相关元类型信息可通过以下任一方式生成:

  • 由 AUTOMOC 自动生成。qt_extract_metatypes() 命令会检测target 上是否启用了 AUTOMOC,并自动提取所需信息。
  • 通过带--output-json 选项手动调用moc 。项目需负责跟踪通过此方法生成的所有JSON文件,并通过MANUAL_MOC_JSON_FILES 选项将其传递给qt_extract_metatypes() 。

qt_extract_metatypes() 生成一个针对特定目标的元类型 JSON 文件,该文件汇总了来自 AUTOMOC 和手动 moc 输入的所有元类型详细信息。其实现方式是调用moc 并指定--collect-json 选项。 如果您需要了解生成的元类型 JSON 文件位于何处(例如,将其传递给另一个命令或进行安装),请使用OUTPUT_FILES 选项,指定一个用于存储其绝对路径的变量名称。

自动元类型提取

自 Qt 6.8 起,如果您未禁用 `AUTOMOC `,且正在使用 CMake 3.19 或更高版本,或者手动调用了`qt_finalize_target()`,那么 `qt_extract_metatypes() ` 将作为 `qt_add_library()` 最终化步骤的一部分被自动调用。 如果您已在最终化之前手动调用了qt_extract_metatypes() (可能带有自定义参数),则此行为无效。但是,如果您尚未手动调用,这确实能确保元类型也会被生成。如果未来任何时候库中的类型被用作任何 QML 类型的一部分,这一点非常重要,且没有任何弊端。

此外,qt_add_qml_module()会自动为其目标调用qt_extract_metatypes() 。

© 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.