仅在项目树外为 header class 生成 moc 文件

Generate moc file for header only class outside the project tree

我仅使用继承 QObject class 并使用 Q_OBJECT 宏的 headers 文件定义了一些 classes。它们被放置在我电脑上的某个文件夹中。 我想在我的 qt 项目中包含这些 classes。

我用这种方式写了一个 .pri 文件(位于这些 classes 的同一文件夹中):

INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD

在我的 .pro 项目文件中,我包含了 .pri(使用 include() 命令)并且我可以导入 headers。 问题是在编译过程中我有一些与 QMetaObject 相关的链接错误,例如

Plc.obj:-1: error: LNK2001: external symbol "public: virtual struct QMetaObject const * __cdecl Conveyor::metaObject(void)const " (?metaObject@Conveyor@@UEBAPEBUQMetaObject@@XZ) not resolved

我认为这个问题与qmake没有为每个class生成moc文件有关,它只包含headers路径。事实上,如果我从这些 classes 中删除 Q_OBJECT 宏,我就可以成功编译项目。

有一种方法可以告诉 qmake,它必须为这些 headers 生成 moc 文件?我想避免为这些 classes 创建库或项目。 或者可能有不同的解决方案?

终于找到解决方法了

我只是在 .pri 文件末尾添加了 HEADER 命令。 现在编译器扫描头文件并创建 moc 文件。 ``

我的更新 .pri 文件是:

INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD

HEADERS += \
    $$PWD/MyClass1.h \
    $$PWD/MyClass2.h