8

プリコンパイル済みヘッダーを多用するプロジェクトで Visual C++ 2012 を使用しています。非常に重いため、悪名高い/Zmスイッチが使用されています。

進行中のビルドをキャンセルすると、次のビルドで次のエラーが発生することがあります。

error C1852: 'foo.pch' is not a valid precompiled header file

10 回のうち 9 回は問題なく動作しますが、これが発生した場合は、ビルドを再開する前に .pch を見つけて手動で削除する必要があります。

それは私を少し悩ませます。これを防ぐ方法はありますか?マイクロソフトからのパッチ?または、Visual に .pch を強制的に削除させ、問題が発生したときにビルドを自動的に再起動させる方法はありますか? または、私が考えていなかった他の解決策はありますか?

編集:これが私が実行しているVisualのバージョンです:

Microsoft Visual Studio Professional 2012
Version 11.0.61030.00 Update 4
4

3 に答える 3

1

私はこの問題に遭遇しなかったので、これは純粋な推測です。

Visual が .pch ファイルの破損を検出する方法を調べてみてください (つまり、空のファイル、ファイルが正しく終了していないなど)。明確なパターンに従っている場合は、すべての .pch を解析して破損したものを削除するビルド前のスクリプトを記述します。

于 2014-01-15T10:22:52.873 に答える
1

ファイルの再コンパイルを試みるスクリプトを作成しstdafx.cppますが、今回は生成する代わりに PCH を使用します。つまり、期待される結果は、空のファイルのコンパイルが成功することです。これが失敗した場合は、PCH を削除します。このスクリプトをビルド前のステップとして実行します。

かなり高価に聞こえますが、非常に信頼性があります。PCH の読み込みに問題があると、コンパイラのアップグレードであっても PCH が再生成されます。また、PCH は現在ファイル キャッシュにあるため、実際の使用はわずかに安くなります。

これは、やや特殊なルールを持つ NMAKE ビルド スクリプトとして実装される可能性があります。

于 2014-01-15T10:37:10.730 に答える
0

これらの破損したファイルでパターンを見つけようとするという rockeye の提案に従いました。非常に単純であることがわかります。有効なファイルはVCPCH0ヘッダーで始まりますが、破損したファイルはそうではありません。

失敗したプロジェクトのビルド前イベントとして単純な C# プログラムを実行し、破損したファイルを削除すると、問題が解決します。誰かが興味を持っているなら、ソースはここにあります.

于 2014-10-15T17:12:54.760 に答える