2014-01-14 2 views
8

私はVisual C++ 2012をプリコンパイル済みヘッダーを大量に使用するプロジェクトで使用しています。悪名高い/Zmスイッチが使用されているほど重い。 10のうちキャンセルされたビルドでランダムにプリコンパイルされたヘッダーを処理するにはどうすればよいですか?

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

9回は、物事がスムーズに行くだろうが、この問題が発生したとき、私は見つけることがあります。

私は進行中のビルドをキャンセル

は、私は時々、次のビルドでこのエラーが発生します。ビルドを再起動する前に手動で削除してください。

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

EDIT:

Microsoft Visual Studio Professional 2012 
Version 11.0.61030.00 Update 4 
+0

私はC++タグを削除しました。これはコンパイラ固有の質問で、言語に関する質問ではありません。 –

+5

@マークB私は、おそらく、VCに精通している人が、コンパイラ固有のタグを監視する人よりもC++タグを監視する人が多いと考えています。 rev 1にロールバックされました。 – Praetorian

+1

Rebuildはpchファイルを強制終了しませんか? pchエラーが発生した場合は、Rebuildを押すだけです。 –

答えて

0

私は、これらの破損したファイルでパターンを見つけようとするロッキーの提案に従った。有効なファイルはVCPCH0ヘッダーで始まり、破損したファイルではありません。

障害のあるプロジェクトのプリビルドイベントとして実行され、破損したファイルを削除する単純なC#プログラムは、この問題を解決します。興味があれば、ソースはright hereです。

1

を、私はこの問題に遭遇していなかったので、これは、純粋な推測である:ここで私が実行しているビジュアルのバージョンがあります。

ビジュアルが.pchファイルが壊れている(つまり、空のファイル、ファイルが正しく終了していないなど)ことを検出する方法を確認してください。明確なパターンに従っている場合は、すべての.pchを解析して破損したパターンを削除するビルド前スクリプトを作成します。

+0

彼はすでにパターンがないと言っていました –

+0

パターンがあるかもしれません。疑わしいほど小さなサイズです。私はそれを調べます。良いアイデア! –

1

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

かなり高価だと思いますが、非常に信頼性があります。 PCHをロードする際に問題が発生すると、コンパイラーのアップグレードさえも再生成されます。また、PCHがファイルキャッシュにあります。これは、実際の使用がわずかに安いことを意味します。

これは、NMAKEビルドスクリプトとして実装される可能性があります。

+0

パターンが見つからない場合、これは良い解決策のように聞こえますが、私はちょうどその高価なものが.pchの事前チェックであることを見なければなりません。 –

+0

PCHファイルがこのテストに合格した場合、小さな.OKファイルを作成すると、NMAKE経由で実行するとかなり高速になる可能性があります。その.OKファイルが.PCHより新しい場合は、.PCHを再チェックする必要はありません – MSalters

関連する問題