ビルド時に欠落している.pchファイルを修正する方法


164

Visual Studioでc ++ソリューションをビルドすると、xxxxx.pchファイルが見つからないというメッセージが表示されます。プリコンパイル済みヘッダーを元に戻すために欠けている設定はありますか?

ここに完全性のための正確なエラーがあります:

Error   1   fatal error C1083: Cannot open precompiled header file: 'Debug\xxxxx.pch': No such file or directory

1
あなたはより多くの情報を提供する必要があります。正確にはどのようなエラーが発生していますか?プロジェクトは現在どのように構成されていますか?
Assaf Lavie、

単純な再構築ですべてが私の問題を修正しました。
Deqing

回答:


436

注:IDEの新しいバージョンでは、関連ファイルのデフォルト名に「stdafx」ではなく「pch」を使用する場合があります。以下の手順でstdafxをpchに置き換える必要がある場合があります。謝罪します。それは私のせいではありません。

  1. ソリューションエクスプローラーでプロジェクトを右クリックします。
  2. ドロップダウンメニューの下部にある[プロパティ]をクリックします。
  3. プロパティページの左上で、ドロップダウンメニューから[すべての構成]を選択します。
  4. C / C ++ツリーを開き、[プリコンパイル済みヘッダー]を選択します
  5. プリコンパイル済みヘッダー:使用の選択(/ Yu)
  6. [プリコンパイル済みヘッダーファイル]フィールドに入力します。標準はstdafx.hです
  7. OKをクリック

  8. ヘッダーファイルにstdafx.hがない場合は、そこに配置します。これを編集して、プリコンパイルするすべてのヘッダーを#includeします。

  9. stdafx.cppという名前のファイルをプロジェクトに追加します。#include "stdafx.h"を先頭に置き、それ以外は何も入れません。
  10. ソリューションエクスプローラーでstdafx.cppを右クリックします。手順4と同様に、[プロパティ]と[すべての構成]を再度選択します...
  11. ...しかし、今回は[プリコンパイル済みヘッダーの作成(/ Yc)]を選択しますこれは、1つのファイルstdafx.cppにのみバインドします。
  12. #include "stdafx.h"をすべてのソースファイルの最上部に配置します。

ラッキー13.指をクロスし、ビルドを押します。


58
stdafx.cppの設定が異なることを知りませんでした。すばらしい答えです。
エキスパート

5
もう1つはステップ10と11がないため、これは受け入れられる答えになるはずです。ありがとうございます。
JBentley 2013

2
これは私のものより基本的な答えです。PCHを機能させるにはステップ1〜7が必要ですが、質問のエラーメッセージは、これらのステップがすでに実行されていることを示しています。OTOH、それは単一のstdafx.pchファイルを想定していますが、xxxxx.pch質問からの質問はより複雑な問題(マルチPCHセットアップ)を示唆しています。
MSalters 2014年

1
この答えは本当にその日を救った。ありがとう。
Matt Craig

ありがとうございます!新しいプロジェクトのためにC / C ++ rのルーツに戻ると、少しスパッツのように感じます
コルビーアフリカ

59

プリコンパイル済みヘッダー(pch)の使用は2段階のプロセスです。

ステップ1で、スタブファイルをコンパイルします(VS200xでは、通常はと呼ばれstdafx.cppます。新しいバージョンではpch.cpp。を使用します)。このスタブファイルには、プリコンパイルするヘッダーのみが間接的に含まれています。典型的には、一つの小さなヘッダ(通常stdafx.hまたはpch.hppなど)のリスト標準ヘッダ<iostream><string>、これは、次いで、スタブファイルに含まれています。これをコンパイルすると、.pchファイルが作成されます。

手順2では、実際のソースコードに、手順1の最初のヘッダーと同じ小さなヘッダーが含まれています。コンパイラは、この特別なヘッダーを検出すると、対応する.pchファイルを代わりに読み取ります。つまり、それらの標準ヘッダーを毎回(再)コンパイルする必要はありません。

あなたの場合、ステップ1は失敗したようです。スタブファイルはまだ存在していますか?あなたの場合、それはおそらくでしょうxxxxx.cpp。これ/Yc:xxxxx.pchは、PCHプロセスのステップ1であることを示すコンパイラフラグであるため、でコンパイルされたファイルである必要があります。xxxxx.cppが存在し、そのようなスタブファイルである場合は、/Yc:コンパイラオプションが不足している可能性があります。


13
その後、おそらく/ Yc:コンパイラー・オプションが欠落しています。ちなみに、このオプションはプロジェクトプロパティページ/構成プロパティ/ C-C ++ /プリコンパイル済みヘッダーにあります
wip

22

修正:

  1. プロジェクトにxxxxx.cppがあることを確認してください

  2. / Ycフラグを使用してxxxxx.cppをコンパイルします(プリコンパイル済みヘッダーの作成
    (xxxxx.cppを右クリック->プロパティ->プリコンパイル済みヘッダー-> 作成

  3. / Yuフラグを使用て他のすべてのファイルをコンパイルします(プリコンパイル済みヘッダーを使用
    (プロジェクトを右クリック->プロパティ->プリコンパイル済みヘッダー-> 使用


これは私を直した。どうもありがとうございました!
CharlesW

7
  1. プロジェクトを右クリックして、プロパティメニュー項目を選択します。
  2. goto C / C ++->プリコンパイル済みヘッダー
  3. プリコンパイル済みヘッダーを使用しないを選択

これでうまくいきました。"stdafx.cpp"を削除していたので、それを再度追加しても、プリコンパイル済みヘッダーをオフにするまでこのエラーは発生しません。とにかくプロジェクトは小さいので、速度に大きな違いがあるようではありません。
Contango 2012

3
4.選択Create (/Yc)(復元して再度使用する)
Bitterblue

2

はい、他の人が指摘しているように/ Ycオプションで削除できますが、修正するために触れる必要はほとんどありません。設定を変更せずに、なぜ最初にこのエラーが発生するのですか?プロジェクトを「クリーンアップ」して、単一のcppファイルをコンパイルしようとした可能性があります。この場合、プリコンパイラヘッダーがなくなっているため、このエラーが発生します。プロジェクト全体をビルドして(失敗した場合でも)、単一のcppファイルをビルドすると、このエラーは発生しません。


2

これがサーバービルド(AppCenter)で発生していて、CocoaPodsを使用している場合は、Podfileがチェックインされていることを確認してください。

AppCenterは、Pofileが見つかり、ファイル上のPODSフォルダが見つからない場合にのみ、「pod install」コマンドを実行します。

フォルダーをチェックインしましたが、gitは.pchファイルを自動的に無視するため(これを確認するには.gitignoreを確認してください)、私の.pchがチェックインされませんでした。

私は.pchファイルにチェックを強制することで問題を分類しましたが、その場合Appcenterがポッドインストールコマンドを実行するため、PODSフォルダーの削除も機能するはずです。

うまくいけば、これは誰かを助けます。


0

すべてが正しいが、この間違いが存在する場合は、****。vcxprojファイルの次のセクションを確認する必要があります。

<ClCompile Include="stdafx.cpp">
  <PrecompiledHeader Condition=

私の場合、構成の名前が間違っていました:最初の単語のみ。


0

私はこのトピックが非常に古いことを知っていますが、最近VS2015でこれに対処しており、ビルドフォルダーを削除して再ビルドするのに役立ちました。これは、プログラムを閉じようとしたり、ビルド中にVSを停止/フリーズしたりしたために発生した可能性があります。


はい、しかし元の質問はVS2015ではなくVS2008に関するものでした。これがOPの問題を解決するという確信はありますか?
T-Heron

それがどのVSバージョンであるかに関係なく、問題はさまざまなビルド間で依然として発生します。ちょうどそれを試して、あなたが扱っているもののためにそれがうまくいくかどうか確かめてください。
glover12 2016

0

私は同じ問題のあるiOS PCHファイルを探していました。私のようにここに来た場合、私が見つけた解決策は派生データをクリアすることです。シミュレータを閉じ、xCode設定に移動します->場所->派生データファイルパスに移動し、xCodeを閉じ、派生データフォルダ内のファイルを削除し、再起動して応援します:)


-1

ビルド>ソリューションのクリーンアップを試してから、ビルド>ソリューションのビルドを試してください。 これは私にとってはうまくいきます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.