-1

我有一个通过 Makefile 构建的大项目。而且我不能更改.pro它的文件。现在我正在尝试在项目中使用 Qt,所以我创建了这些文件:

//Emitter.h
#ifndef EMITTER_H
#define EMITTER_H

#include <QObject>
#include <QDBusInterface>
#include <QDBusAbstractAdaptor>
#include <QDBusVariant>

class Emitter
{
    Q_OBJECT
public:
    Emitter();

private:
    QDBusInterface * m_interface;
    QString m_interfaceName;
};

#endif // EMITTER_H

和 //Emitter.cpp #include "Emitter.h"

Emitter::Emitter()
{
}

然后我将 Emitter.o 添加到*.oMakeFile 的列表中。如果我尝试构建,我会收到一个错误:

Emitter.h:4: error: QObject: No such file or directory

这是正常的,因为 Makefile 目前不知道 Qt 标头。

必须对 Makefile 做什么才能使其构建?

4

2 回答 2

1

你应该添加

cpp 文件到您的制作文件。但请注意 - 在您应该使用 MOC 从您的标头制作另一个 cpp 之前(因为您使用 Q_OBJECT)

例如

moc_emitter.cpp: 
   /PATH/TO/moc $(DEFINES) $(INCPATH) emitter.h -o moc_emitter.cpp

然后 .o 部分

moc_emitter.cpp.o: moc_emitter.cpp
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_emitter.o moc_emitter.cpp
emitter.o: emitter.cpp
     $(CXX) -c $(CXXFLAGS) $(INCPATH) -o emitter.o emitter.cpp

并且仅将新的 .0 文件添加到 OBJECTS 部分。

  • 您应该为 moc 和编译添加不同的 Qt PATH(有关 Qt 标头的信息)
于 2013-09-11T13:14:51.860 回答
0

将 qtinclude文件夹添加到包含列表

您还需要运行mocemmitter.h 并编译生成的文件

于 2013-09-11T13:06:00.843 回答