我有一个通过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
和 发射器.cpp #include "发射器.h"
Emitter::Emitter()
{
}
然后,我将Emitter.o添加到MakeFile中的*.o
列表中。如果我尝试构建,则会收到错误:
Emitter.h:4: error: QObject: No such file or directory
这是正常的,因为Makefile目前不知道Qt标头。
必须对生成文件执行哪些操作才能使其生成?
你应该添加
cpp 文件S到您的制作文件。但请注意 - 在你应该用 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文件添加到"对象"部分。
- 您应该为 moc 和编译添加不同的 Qt 路径(有关 Qt 标头的信息)
将 qt include
文件夹添加到包含列表中
您还需要在 emmitter.h 上运行moc
并编译生成的文件