VC預編譯標頭檔案問題解析

2021-06-13 13:44:20 字數 1767 閱讀 9072

一般如果有些東西多了很久了,編譯出現下列問題可能解決辦法是:

用記事本開啟.dsp檔案,找到關於這樣一段:

source=.\stdafx.cpp

# end source file

# end group

# begin group "header files"

發現少了乙個編譯開關的,所以不能生成.pch檔案的:加上開關# add cpp /yc"stdafx.h"成如下即可。

source=.\stdafx.cpp

# add cpp /yc"stdafx.h"

# end source file

# end group

# begin group "header files"

但是我的問題還是沒有解決,又找到了方法二:

因為由於編寫環境的設定問題,在編譯vc時出現了這樣的錯誤:

fatal error c1083: cannot open precompiled header file: 'debug/myqq.pch': no such file or directory

在網上蒐集了一下,這個錯誤是預編譯檔案的設定造成的,有幾種可以嘗試的途徑:

1)單獨編譯stdafx.cpp

2)編譯所有(即按ctrl+f7)

3)在工程-設定-c++-最下面的工程選項裡去掉××。pch檔案

4)在工程-設定-c++-在分類裡選擇預編譯標頭檔案,選擇自動使用預補償頁首,或者選擇不使用預補償頭

補充知識:

要想弄明白出現問題的原因還是先了解一下pch檔案吧,參考一下資料: 

預編譯標頭檔案(一般擴充套件名為.pch),是把乙個工程中較穩定的**預先編譯好放在乙個檔案(.pch)裡.這些預先編譯好的**可以是任何的c/c++**--甚至可以是inline函式,只它們在整個工程中是較為穩定的,即在工程開發過程中不會經常被修改的**.

為什麼需要預編譯標頭檔案?一言以蔽之:提高編譯速度.一般地,編譯器以檔案為單位編譯,如果修改了一工程中的乙個檔案則所有檔案都要重新編譯,包括標頭檔案 裡的所有東西(eg.macro巨集,preprocessor預處理),而vc程式中,這些標頭檔案中所包括的東西往往是非常大的,編譯之將佔很長的時間. 但它們又不常被修改,是較穩定的,為單獨的乙個小檔案而重新編譯整個工程的所有檔案導致編譯效率下降,因此引入了.pch檔案.

如何使用預編譯標頭檔案以提高編譯速度?要使用預編譯標頭檔案,必須指定乙個標頭檔案(.h),它包含我們不會經常修改的**和其他的標頭檔案,然後用這個標頭檔案 (.h)來生成乙個預編譯標頭檔案(.pch)vc預設的標頭檔案就是stdafx.h,因為標頭檔案是不能編譯的,所以我們還需要乙個.cpp檔案來作橋梁, vc預設的檔案為stdafx.cpp,這個檔案裡只有一句**就是:#include "stdafx.h".接下來要用它生成.pch檔案,涉及到幾個重要的預編譯指令:/yu,/yc,/yx,/fp.簡單地說,/yc是用來生成. pch檔案的編譯開關.在project->setting->c/c++的category裡的precompiled header,然後在左邊的樹形檢視中選擇用來編譯生成.pch檔案的.cpp檔案(預設即stdafx.cpp)你就可以看到/yc這個開關,它表示這 個檔案編譯了以後是否生成.pch檔案(可能/yc的c表示create)./fp指令指定生成的.pch檔案的名字及路徑(可能/fp的p代表 path)./yu的u即use使用,工程中只要包括了.h檔案的檔案都會有這個/yu指令.如果選擇自動automatic...的話則原來為/yc的 地方就換成了/yx指令.如果選擇自動,則每次編譯時編譯器會看以前有沒有生成過.pch檔案,有則不現生成否則就再次編譯產生.pch檔案.

來自:   

預編譯標頭檔案問題

預編譯標頭檔案 今天在改乙個很大的程式,慢慢看,慢慢改。突然發現乙個.c檔案,裡面什麼也沒有,就幾個標頭檔案,我一看,我靠,這不是把簡單的問題搞複雜了嗎,隨手刪掉那個c檔案。結果不能編譯了,我靠 fatal error c1083 cannot open precompiled header fil...

vc 找不到預編譯標頭檔案

在將vc工程從低版本向高版本公升級的時候,可能出現下面的問題,cannot open precompiled header file projectname.pch no such file or directory 意思是找不到預編譯檔案,解決辦法 1 不使用預編譯,但這樣做不是很好,可能原來的工...

預編譯標頭檔案

stdafx.h標頭檔案的作用 今天在改乙個很大的程式,慢慢看,慢慢改。突然發現乙個.c檔案,裡面什麼也沒有,就幾個標頭檔案,我一看,我靠,這不是把簡單的問題搞複雜了嗎,隨手刪掉那個c檔案。結果不能編譯了,我靠 fatal error c1083 cannot open precompiled he...