仅在项目树外为 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
我仅使用继承 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