【问题标题】:How do I add Qt class in a project makefile?如何在项目 makefile 中添加 Qt 类?
【发布时间】:2013-09-11 12:52:42
【问题描述】:

我有一个通过 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 "Emitter.h"

Emitter::Emitter()
{
}

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

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

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

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

【问题讨论】:

    标签: c++ qt makefile


    【解决方案1】:

    你应该添加

    cpp 文件到你的 make 文件。但请注意 - 在您应该使用 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 标头的信息)

    【讨论】:

    • 你能解释一下为什么需要 moc_emitter.cpp.o 吗?创建emitter.o时不使用。
    • Qt 的 moc 工具为 Q_OBJECT 声明的函数和您在 .h 中定义的所有信号生成实现。这就是 moc_emitter.cpp 中包含的内容。所以为了使用这些功能,你必须链接到 moc_emitter.cpp.o
    【解决方案2】:

    将 qt include 文件夹添加到包含列表中

    您还需要在 emmitter.h 上运行 moc 并编译生成的文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多