如何在Xcode中使用Q_OBJECT宏编译头文件?

时间:2012-07-07 02:28:09

标签: xcode qt qobject moc

我在Xcode中创建了与Qt框架链接的C ++项目。你好世界计划运作良好。当我添加一个从QObject派生的类并添加Q_OBJCET宏时,就会出现链接错误。

班级

MyObject.h

#ifndef MyObject_h
#define MyObject_h

#include <QtCore/QObject>

class MyOBject : public QObject
{
  Q_OBJECT

public:
    MyOBject();

};


#endif

MyObject.cpp

#include "MyObject.h"

MyOBject::MyOBject()
{
}

我知道我应该首先使用moc编译MyObject.h并将生成的moc_MyObject.cpp添加到Xcode项目中。

在Microsoft Visual Studio中,我可以配置此头文件以使用moc自定义工具进行编译。并将生成cpp文件添加到VS项目。

但这是Xcode。我的问题是:在Xcode中是否有相同的平均值来编译包含Q_OBJECT宏的头文件?

2 个答案:

答案 0 :(得分:6)

以下是您在Xcode 6中的表现:

选择目标,然后在构建规则中制作新的自定义规则。 设置&#34;流程&#34;下拉到&#34;名称匹配&#34的源文件;并在旁边输入*.h。 设置&#34;使用&#34;下拉到&#34;自定义脚本:&#34;并在脚本中输入接近此内容的内容:

/path/to/your/Qt/bin/moc ${INPUT_FILE_PATH} -o ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}_moc.cpp

您必须将路径更改为您的moc可执行文件所在的位置。 现在设置&#34;输出文件&#34;到:

${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}_moc.cpp

这是自定义规则。

现在要使用此规则编译标头。当您的目标仍然被选中时,请转到&#34;构建阶段&#34;。扩展&#34;编译源&#34;部分,击中&#34; +&#34;底部的按钮。查找并添加包含Q_OBJECT类的头文件。如果您无法在项目中找到它们,请先将这些标题添加到项目中。

然后,Xcode将在这些标题上运行moc,它会理解moc的输出是.cpp,需要编译并链接到你的应用程序并为你做。

答案 1 :(得分:1)

我没有找到如何在Xcode中为特定头文件设置自定义工具。我通过构建阶段脚本(Build Phases - &gt; Add Build Phase - &gt; Add Run Script)找到了一个解决方法。我将moc命令行添加为脚本,并将生成的moc_MyObject.cpp文件包含到MyObject.cpp中。它现在有效。