我在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宏的头文件?
答案 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中。它现在有效。