2011-05-23 55 views
103

當我在Visual Studio中構建我的C++解決方案時,它抱怨缺少xxxxx.pch文件。有沒有一個設置我錯過了預編譯頭文件?如何修復生成的.pch文件丟失?

這裏是爲了完整性確切的錯誤:

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

您必須提供更多信息。你得到了什麼錯誤?你的項目目前如何配置? – 2011-05-23 11:27:31

+0

只是一個簡單的重建所有固定我的問題。 – Deqing 2016-09-15 06:57:25

回答

292
  1. 右擊在解決方案瀏覽器中。
  2. 單擊下拉菜單底部的屬性。
  3. 在Properties頁面左上角的 中,從下拉菜單中選擇All Configurations。
  4. 打開C/C++樹,並選擇預編譯頭
  5. 預編譯頭:選擇使用(/羽)
  6. 填寫預編譯頭文件字段。標準是stdafx.h中
  7. 點擊確定

  8. 如果你沒有在stdafx.h中頭文件放在那裏。編輯 它#include所有你想要預編譯的頭文件。

  9. 將一個名爲stdafx.cpp的文件放入您的項目中。把#include「stdafx.h」 放在它的頂部,沒有別的。
  10. 右鍵單擊解決方案資源管理器中的stdafx.cpp。選擇屬性 和所有配置再次在第4步中...
  11. ...但是這次選擇預編譯頭文件創建(/ Yc)。這將只有 綁定到一個文件stdafx.cpp。
  12. 將#include「stdafx.h」放在所有源文件的最頂部。

幸運13.橫過你的手指,並打建立。

+41

我不知道stdafx.cpp應該有不同的設置。很好的答案。 – expert 2012-11-09 23:22:20

+3

這應該是公認的答案,因爲另一個缺少步驟10和11.謝謝! – JBentley 2013-09-15 19:27:30

+1

這是比我更基本的答案。步驟1-7是獲得PCH工作所必需的,但問題的錯誤信息表明這些步驟已經完成。 OTOH,它假定一個'stdafx.pch'文件,而來自該問題的'xxxxx.pch'提示更復雜的問題(多PCH設置)。 – MSalters 2014-03-17 09:02:06

55

預編譯頭(PCH)是使用一個兩步驟的過程。

在第一步,你編譯一個存根文件(在VS200x中它通常被稱爲stdafx.cpp)。這個存根文件間接地只包含你想要預編譯的頭文件。通常,一個小標題(通常爲stdafx.h)列出標準標題,如<iostream><string>,然後將其包含在存根文件中。編譯這將創建.pch文件。

在步驟2中,您的實際源代碼包含與第一個標題相同的步驟1中的小標題。編譯器在遇到此特殊頭文件時,會讀取相應的.pch文件。這意味着它不必每次都(重新)編譯這些標準頭文件。

就你而言,似乎第1步失敗。存根文件是否仍然存在?在你的情況下,這可能是xxxxx.cpp。它必須是一個用/Yc:xxxxx.pch編譯的文件,因爲這是編譯器標誌,指示它是PCH進程的第1步。如果xxxxx.cpp存在,並且是這樣一個存根文件,那麼它可能會丟失它的/Yc:編譯器選項。

+13

**那麼它可能會丟失它的/ Yc:編譯器選項。**順便說一句,該選項位於項目屬性頁/配置屬性/ C-C++ /預編譯頭文件 – wil 2013-03-21 05:28:57

6
  1. 右擊該項目並選擇屬性菜單項
  2. 轉到C/C++ - >預編譯頭
  3. 選擇不使用預編譯頭在你的項目
+0

這適用於我。我刪除了「stdafx.cpp」,然後當我將其添加回去時,直到我關閉預編譯頭文件時,這個錯誤纔會消失。無論如何,這個項目很小,所以它不像它對速度有很大影響。 – Contango 2012-09-13 14:00:10

+2

** 4。選擇'Create(/ Yc)'**(恢復並再次使用它) – Bitterblue 2014-04-15 13:52:41

18

修復:

  1. 請確保您有xxxxx.cpp在你的項目

  2. 編譯xxxxx.cpp與/ YC標誌(創建預編譯頭)
    (右鍵點擊on xxxxx.cpp - > properties - > Precompiled Headers - >create

  3. 編譯所有其他文件與/羽標誌(使用預編譯頭)
    (右鍵單擊項目 - >屬性 - >預編譯頭 - >使用

1

是的,它可以用其他人指出的/ Yc選項消除,但很可能你不需要觸摸它來修復它。爲什麼你首先得到這個錯誤而不改變任何設置?您可能已經「清理」了項目,並試圖編譯一個cpp文件。在這種情況下,你會得到這個錯誤,因爲現在缺少預編譯頭。只需構建整個項目(即使不成功)並且構建任何單個cpp文件,您都不會收到此錯誤。

-1

嘗試構建>清理解決方案,然後構建>構建解決方案。 This適合我。

0

如果一切是正確的,但這個錯誤存在,它需要檢查下一節**** vcxproj文件:

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

在我的情況下,它有一個配置的不正確的名稱:只第一個字。

0

我知道這個話題很舊,但我最近在VS2015中處理這個問題,並且幫助刪除了構建文件夾並重新構建它。這可能是由於嘗試關閉程序或程序在建立時暫停/凍結VS而發生的。

+0

是的,但最初的問題與VS2008有關,而不是VS2015。你有沒有確定這會解決OP的問題? – 2016-12-25 23:52:08

+0

無論VS版本是什麼,這個問題在不同的版本中都會發生。試試看看它是否適用於你要處理的任何事情。 – glover12 2016-12-30 00:17:30

0

我正在尋找具有相同問題的iOS PCH文件,如果您也喜歡我,我找到的解決方案是清除派生數據;關閉模擬器,轉到xCode首選項 - >位置 - >轉到派生數據文件路徑,關閉xCode,刪除派生數據文件夾中的文件,重新啓動並歡呼:)