Visual Studio 2008のQt4-moc-edファイルはビルドから除外されますか?
-
05-07-2019 - |
質問
最近、Qt SoftwareからVS Addinをインストールし、.proプロジェクトをVS2008にインポートしました。 通常、すべてが正常に機能しますが、1つだけ小さいが厄介な例外があります。
Q_OBJECTであることを宣言するクラスを持つfile.cppがあるとします。 そのため、ファイルはMOCで処理され、moc_file.cppが生成され、「生成されたファイル」の下のソリューションで利用できます。これまでのところとても良い。
面白いことに、file.cppで何かを変更し(たとえば、行を追加)、Ctrl + Sを使用してファイルを保存すると、moc_file.cppがビルドから除外されます(エントリなしの記号が表示されます)アイコン)。そして、F7キーを押してソリューションを構築すると、多くの典型的なリンカーエラーが発生します。状況を修正するには、moc_file.cppのプロパティに移動し、「ビルドから除外」を変更する必要があります。 「はい」から「いいえ」に。その後、すべてが正常に動作します。
他の人も同じことを経験していますか?私は何か間違っていますか?
解決
問題は解決しました。私のプロジェクトを説明する手作りの.proファイルで、MOC_DIRが次のように指定されていることがわかりました。
MOC_DIR = .moc
「生成されたファイル」用にVisual Studioディレクトリにインポートした後リリースとデバッグの両方で同じでした。たとえば、アクティブな構成がデバッグの場合、ファイルを保存すると、リリース関連のファイルに適しているため、ビルドから除外されました-rpgとAndrewが提案したとおりです。 ディレクトリを.moc \ $(ConfigurationName)に変更すると、問題は発生しなくなりました(ソリューションに生成された各ファイルの2つのバージョンが表示されます-各構成に1つ)
皆さんのご協力に感謝します!
他のヒント
実際、その「機能」の解決策を見つけました。 GeneratedFiles \ DebugおよびGeneratedFiles \ Debug(または他の構成ディレクトリ)から両方のファイルを追加する必要があります。 Qtは、現在選択されているビルドタイプに属さないものをすべてビルドから除外します。
はい、最新のVSアドインを使用していますが、プロジェクトはQtプロジェクトとして正しく表示されます。
構成を正しく設定しましたか?
「デバッグ構成設定」ウィンドウを開きます。 次のように次の項目を設定します。
- "コマンドラインの構築" qmake -project& qmake& nmakeデバッグ
- "クリーンコマンド" nmake debug-clean
- "コマンドラインの再構築" qmake& nmakeデバッグ
同じリリース設定を繰り返します
VS2008(VS 2003でも)のビルド動作から除外された動作を見ましたが、プロジェクトは正しくビルドされます。 moc'ableファイルを変更する場合、古くなっているため、Qtはmoc'edファイルを再作成する必要があります。
Qtのアルゴリズムは次のように思われます:
- ファイルが変更されたことを検出
- 古いmocファイルをビルドから除外するように設定する
- 同じ名前でプロジェクトに新しいファイルを追加し、ビルドに含めます
VS 2003プロジェクトを見ると、一部のmoc_ *ファイルがプロジェクトに2回含まれていることがわかります。1つのバージョンはビルドから除外されるように設定され、もう1つのバージョンは除外されません。
qmakeを使用して .vsproj
ファイルを再作成すると、問題が解決する場合があります。
お持ちのすべてのQObjectファイルについて、QTプラグインはすべてのビルド構成(通常はデバッグとリリースのみ)に対してmoc_ファイルを作成します。現在の構成を変更すると、1つのファイルから別のファイルにエントリなしの兆候が表示されます。
.cppファイルを変更しても、moc_ファイルは変更されません。 .hファイルを変更した場合のみ。これにより、構成に何らかの問題が発生したということになります。実際に修正する最良の方法は、次のようなものを使用してqmakeで再作成することです。
qmake -spec win32-msvc2008