2

Qtフレームワークに対してリンクするC++プロジェクトをXcodeで作成します。helloworldプログラムはうまく機能します。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です。私の質問は次のとおりです。Q_OBJECTマクロを含むヘッダーファイルをコンパイルするための同等の手段がXcodeにありますか?

4

2 に答える 2

6

Xcode6でそれを行う方法は次のとおりです。

ターゲットを選択し、ビルドルールで新しいカスタムルールを作成します。[プロセス]ドロップダウンを[名前が一致するソースファイル]に設定し、*.hその横に入力します。[使用]ドロップダウンを[カスタムスクリプト:]に設定し、スクリプトに次のように入力します。

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

moc実行可能ファイルがある場所へのパスを変更する必要があります。次に、「出力ファイル」を次のように設定します。

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

カスタムルールは以上です。

次に、このルールでコンパイルされるヘッダーを取得します。ターゲットがまだ選択されている間に、「ビルドフェーズ」に進みます。[ソースのコンパイル]セクションを展開し、下部にある[+]ボタンを押します。Q_OBJECTクラスを含むヘッダーファイルを見つけて追加します。ヘッダーが見つからない場合は、最初にそれらのヘッダーをプロジェクトに追加してください。

これで、Xcodeはそれらのヘッダーでmocを実行し、mocからの出力が.cppであり、コンパイルしてアプリにリンクする必要があることを理解し、それを実行します。

于 2015-12-30T06:05:36.520 に答える
1

Xcodeで特定のヘッダーファイルのカスタムツールを設定する方法が見つかりませんでした。ビルドフェーズスクリプト(ビルドフェーズ->ビルドフェーズの追加->実行スクリプトの追加)を介して回避策を見つけました。スクリプトとしてmocコマンドラインを追加し、生成されたmoc_MyObject.cppファイルをMyObject.cppに含めました。今は動作します。

于 2012-07-09T10:40:24.230 に答える