編譯C++出現錯誤:Cannot open precompiled header
fatal error C1083: Cannot open precompiled header file: \'Debug/v13_3.pch\':
No such file or directory
這個(gè)錯誤是預編譯文件的設置造成的,有幾種可以嘗試的途徑:
1)單獨編譯StdAfx.cpp
2)編譯所有(即按Ctrl+F7)
3)在工程-設置-c++-最下面的工程選項里去掉××。pch文件
4)在工程-設置-c++-在分類(lèi)里選擇預編譯頭文件,選擇自動(dòng)使用預補償頁(yè)眉,或者選擇不使用預補償頭
補充知識:
要想弄明白出現問(wèn)題的原因還是先了解一下pch文件吧,參考一下資料:
預編譯頭文件(一般擴展名為.PCH),是把一個(gè)工程中較穩定的代碼預先編譯好放在一個(gè)文件(.PCH)里.這些預先編譯好的代碼可以是任何的C/C++代碼--甚至可以是inline函數,只它們在整個(gè)工程中是較為穩定的,即在工程開(kāi)發(fā)過(guò)程中不會(huì )經(jīng)常被修改的代碼.
為什么需要預編譯頭文件?一言以蔽之:提高編譯速度.一般地,編譯器以文件為單位編譯,如果修改了一工程中的一個(gè)文件則所有文件都要重新編譯,包括頭文件里的所有東西(eg.Macro宏,Preprocessor預處理),而VC程序中,這些頭文件中所包括的東西往往是非常大的,編譯之將占很長(cháng)的時(shí)間.但它們又不常被修改,是較穩定的,為單獨的一個(gè)小文件而重新編譯整個(gè)工程的所有文件導致編譯效率下降,因此引入了.PCH文件.
如何使用預編譯頭文件以提高編譯速度?要使用預編譯頭文件,必須指定一個(gè)頭文件(.H),它包含我們不會(huì )經(jīng)常修改的代碼和其他的頭文件,然后用這個(gè)頭文件(.H)來(lái)生成一個(gè)預編譯頭文件(.PCH)VC默認的頭文件就是StdAfx.h,因為頭文件是不能編譯的,所以我們還需要一個(gè).CPP文件來(lái)作橋梁,VC默認的文件為StdAfx.cpp,這個(gè)文件里只有一句代碼就是:#include "StdAfx.h".接下來(lái)要用它生成.PCH文件,涉及到幾個(gè)重要的預編譯指令:/Yu,/Yc,/Yx,/Fp.簡(jiǎn)單地說(shuō),/Yc是用來(lái)生成.PCH文件的編譯開(kāi)關(guān).在Project->setting->C/C++的Category里的Precompiled Header,然后在左邊的樹(shù)形視圖中選擇用來(lái)編譯生成.PCH文件的.CPP文件(默認即StdAfx.cpp)你就可以看到/Yc這個(gè)開(kāi)關(guān),它表示這個(gè)文件編譯了以后是否生成.PCH文件(可能/Yc的c表示create)./Fp指令指定生成的.PCH文件的名字及路徑(可能/Fp的p代表path)./Yu的u即use使用,工程中只要包括了.H文件的文件都會(huì )有這個(gè)/Yu指令.如果選擇自動(dòng)Automatic...的話(huà)則原來(lái)為/Yc的地方就換成了/Yx指令.如果選擇自動(dòng),則每次編譯時(shí)編譯器會(huì )看以前有沒(méi)有生成過(guò).PCH文件,有則不現生成否則就再次編譯產(chǎn)生.PCH文件.
注意:
A,實(shí)際上,由Appzard項目向導生成的默認的頭文件及CPP文件StdAfx.h和StdAfx.cpp可以是任何名字的.原因很簡(jiǎn)單.但如果你要這樣做就要記得修改相應的Project->setting...下的幾個(gè)預編譯指令(/Yc,/Yu,/Yx,/Fp)的參數.
B.在任何一個(gè)包括了將要預編譯的頭文件而使用了.PCH文件的工程文件的開(kāi)頭,一定必須要是在最開(kāi)頭,你要包含那個(gè)指定生成.PCH文件的.H文件(通過(guò).CPP文件包括,默認為StdAfx.cpp),如果沒(méi)包括將產(chǎn)生我最開(kāi)頭產(chǎn)生的錯誤.如果不是在最開(kāi)頭包括將產(chǎn)生讓你意想不到的莫名其妙錯誤,如若不信,盍為試之?
C.預編譯文件.PCH生成之很耗時(shí)間,而且生成之后它也很占磁盤(pán)空間,常在5-6M,注意項目完成之后及時(shí)清理無(wú)用的.PCH文件以節約磁盤(pán)空間.
D.如果丟了或刪了.PCH文件而以后要再修改工程文件時(shí),可將指定的/Yc的.CPP文件(默認為StdAfx.cpp)重新編譯一次即可再次生成.PCH文件,不用傻傻的按F7或Rebuild All