0

私はかなり大きな VS2010 C++ ソリューションを持っています。ソリューションには 1 つのプロジェクトしかないため、プロジェクト間の相互依存関係はありません。問題は、GIT から更新を取得するときに、VS2010 が、更新された新しいファイルの影響を受ける翻訳単位を再構築するほど賢くない場合があることです。これにより、何らかの偽の方法で必然的にクラッシュする実行可能ファイルが作成されます。

部分的なビルドを信頼できず、git を飛び回るたびに完全な再構築を行わなければならず、生産性が低下するため、これは私にとって苦痛です。

注: 私は決して git を非難しているわけではありません。関連する場合に備えて、私のプロセスを指摘しているだけです。また、注意: ビルドするときは、プロジェクトを右クリックして [ビルド] を選択します。

このコンパイラを「デバッグ」して、変更に依存する他のファイルを再構築する必要があることに気付かない理由を知っている人はいますか?

編集: さらに調査すると、GIT の使用を問題として除外できます。多くの場所に含まれているヘッダーファイルを編集して保存し、新しいファイルをビルドしない「ビルド」を実行することで、これを再現できます。

編集 2: 問題は #defines に関連しているようです。別のヘッダーにのみ含まれるヘッダーがあります...そして、#defines で指定された特定の条件下でのみそのヘッダーに含まれます。したがって、 #if COND1 #elif COND2 #else < 問題のあるヘッダー #endif があり、それは壊れています。else ケースからインクルードを取り出すと、依存関係がトリガーされて適切にコンパイルされます。

4

2 に答える 2

1

私は git も VS2010 も知りませんが、make ベースのシステムでこの種の動作を見たとき、それは通常、バージョン管理システムがファイルをプルし、コミットされた時刻 (または変更時刻でさえ) を与えているためです。コミットされたとき)。ビルド システムは、「ソース」ファイルがまだ「オブジェクト」ファイルよりも古いと見なし、再構築に失敗します。

プルを実行するときにファイル時間を修正しないように git するオプションを見つけることができるかどうかを確認してください。代わりに、新しくプルされたファイルに現在の時刻が必要です。

これで問題が解決すると思います。

于 2012-09-13T18:48:18.347 に答える
0

問題が、EDIT2 で言うように、VS の依存関係チェッカーによって検出されないヘッダー ファイルである場合は、次のトリックで解決できます。

  • touchWindows 用のおよびユーティリティのコピーを入手しtestます (たとえば、GNUWin32 サイト.
  • 変更時刻を utracked ヘッダーから追跡ヘッダーにコピーするprebuild コマンドを作成しますが、それは新しい場合のみです。

何かのようなもの:

test.exe untracked.h -nt tracked.h && touch.exe -r untracked.h tracked.h

PS: PowerShell を使用して同じアイデアを記述できるかもしれませんが、その方法はわかりません。

于 2012-09-13T21:43:21.597 に答える