0

Qt 5.3 で Visual Studio 2013 プロジェクトを生成していqmakeます。私の.proファイルには、次の行があります。

MOC_DIR = $$BUILD_DIR/<DEBUG OR RELEASE>/moc

I の場合message($$MOC_DIR)、パスは正しく形成されています。ただし、VS でビルドすると、moc_<CLASS>.cppファイルはその場所に生成されず、代わりに.pro. コンパイル中に次の警告が表示されます。

の名前を持つ 2 つ以上のファイルはmoc_<CLASS>.cpp、同じ場所に出力を生成します

生成された の内容を見ると、次のように表示されるため、これは驚くべきことではありません.vcxproj(無関係なタグ/テキストが省略されています...)。

<CustomBuild Include="..\include\Class.hpp">
    ...
    <Outputs Condition="...Release...">moc_Class.cpp;%(Outputs)</Outputs>
    ...
    <Outputs Condition="...Debug...">moc_Class.cpp;%(Outputs)</Outputs>
    ...
</CustomBuild>

MOC_DIR私のカスタムが無視されるのはなぜですか?

4

1 に答える 1

0

Qt5 で生成された他の VS2013 プロジェクトは、予想どおり、指定された場所にファイルqmakeを配置していたmoc_<CLASS>.cppので、他の何か.proが干渉しているのではないかと疑っていました。

Boost (1.55) を使用しており、Boost をプロジェクトに追加しているときに、この SO の質問:リンクで説明されている問題に遭遇しました。

.proの先頭に次の行を追加しました。

load(moc)
QMAKE_MOC += -DBOOST_MPL_IF_HPP_INCLUDED

...そして、マクロ引数の不一致のバグを整理しました。ここで説明されているバグも発生しました。何らかの理由で設定するload(moc) 前に呼び出すと、カスタムが無視されます。が設定された後に並べ替えると、すべてが期待どおりに機能します。MOC_DIRqmakeMOC_DIRload(moc)MOC_DIR

ファイルが正しいまたはディレクトリに配置される.vcxprojようになりました。moc_<CLASS>.cpp<BUILD>/debug/moc<BUILD>/release/moc

ただし、同じMSB8027ビルド警告が引き続き表示されます。これは、Visual Studioの既知のバグのようです。ただし、追加したときに moc の場所を壊しただけなので、状況を混乱させますがload(moc)、問題が発生する前、問題が存在している間、そして修正された後でも警告を受け取りました! 今のところ、警告を無効にしています。ここでFelix Huang の回答を参照してください。

于 2014-06-05T23:49:47.693 に答える