導航:首頁 > 源碼編譯 > pch如何提高編譯速度

pch如何提高編譯速度

發布時間:2022-07-03 14:03:20

㈠ 為什麼 Qt Creator 的編譯如此之慢

1. 「用Qt寫的程序編譯比MFC慢」的說法是錯誤的
絕對錯誤,單位代碼行數編譯Qt遠比MFC快得多,因為Qt庫的頭文件設計非常好,盡量都使用了前置聲明,避免了頭文件嵌套,幾乎所有類都使用了公有類和私有類的設計,把沒必要公開的聲明放到私有頭文件里,避免了編譯時引入過多代碼。而MFC沒有這樣的設計。
至於大家感覺MFC快主要原因是MFC工程默認打開了編譯預處理頭文件(PCH),但是這是VC編譯器的特性,所有C++程序都可以用,不是MFC特有,Qt也可以使用 PCH
方法很簡單,在你的 .pro 文件中加入一行
PRECOMPILED_HEADER = stable.h指定 Stable.h這個頭文件作為編譯預處理文件,MFC里這個文件一般叫stdafx.h
然後在 stable.h里 包含你所用到的所有 Qt 頭文件,如果你用了很多qt的類可以直接包含所有
比如 :
#include <QtCore>
#include <QtGui>這兩個文件里又包含了幾乎所有Qt常用類
不用擔心,即使包含了所有頭文件也沒關系,有了PCH再多頭文件也沒影響。

如果你還想編譯再快點,可以在 .pro里加入下面一行
QMAKE_CXXFLAGS += /MP指定/mp編譯選項,編譯器將使用並行編譯,同時起多個編譯進程並行編譯不同的cpp

而且QT這種引入PCH的方法比MFC的好,由於MFC的PCH選項是每個工程逐個指定的,很容易被某些人搞壞,我曾經無數次修復PCH問題,但是Qt的選項是寫在.pro里的,寫一次就永遠不會錯。
MFC一旦弄壞了PCH,編譯也慢得令人發指。


個參考時間吧,YY最新版本大約 100多萬行C++代碼,rebuild debug和releae總共需要20多分鍾,機器是i5
四核SSD硬碟。其實對於大項目硬碟才是瓶頸,如果換機械硬碟要慢差不多70%,有個同事用10G內存做了個內存檔編譯,還能快30%。

如果你比這個慢,請檢查自己的代碼問題。

2. 「QT本身編譯慢」的說法是錯的
Qt
本身其實編譯並不慢,慢的是webkit庫和例子程序,你如果不改任何選項默認是會編譯所有的,webkit本身就是個恐龍級項目,用了太多泛型技術,編
譯非常慢。另外Qt里附帶了數百個例子工程,都編譯一邊也很慢。如果僅編譯QT核心庫是很快的,比如QtCore只需要1分鍾,QtGui大約5分鍾。

送個福利(僅限windows vc++ 2008):
configure.exe
-qt-libjpeg -qt-zlib -qt-libpng -qt-libjpeg -qt-gif -no-libtiff
-no-libmng -nomake examples -nomake demos -no-webkit -nomake doc
-no-plugin-manifests -no-exceptions -no-rtti -no-qt3support -no-openssl
-no-opengl -no-multimedia -no-3dnow -no-native-gestures -no-style-motif
-no-style-cde -no-style-cleanlooks -no-style-plastique -no-sql-sqlite
-no-dbus -platform win32-msvc2008
這是我自己用的Qt編譯前的配置命令行,把我自己用不到的都去掉了,這樣配置編譯就快很多了。
我把 webkit examples demos 等大傢伙都去掉了。如果你真的需要這些,可以安裝Qt sdk裡面有編譯好的版本。

補充:Qt creator只是IDE,不是編譯器,編譯慢真的不關他的事,要看你具體用的編譯器是什麼。一般來說在Windows下就是minGW,也就是一個移植版本的GCC,的確是不如VC++里的CL快的。
如果是其它平台,那麼編譯器可以換成LLVM的clang,那就快很多了。
在Windows下來是用VC++吧,推薦VC2008,Qt和VC的IDE結合非常好,我現在的項目都是用VC2008+QT的,開發效率很高,記得裝Visual Assist哦。
qmake -tp vc
可以用 .pro生產 .vcproj的VC工程文件,可以用VC++打開編譯。

㈡ 「PCH」什麼意思

PCH是Paging Indicator CHannel的縮寫,譯為尋呼信道。是北橋中的內存控制器和PCIe控制器都集成到了CPU內部,相當於整個北橋晶元都集成到了CPU內部,主板上只剩下南橋.所以PCH可以理解成南橋.目前Intel的有些SOC就是連PCH也集成到了CPU內部,比如:Intel Xeon D系列.

㈢ nslog在打包後編譯器會自動屏蔽嗎

因為NSLog的輸出還是比較消耗系統資源的,而且輸出的數據也可能會暴露出App里的保密數據,所以發布正式版時需要把這些輸出全部屏蔽掉。我們可以在發布版本前先把所有NSLog語句注釋掉,等以後要調試時,再取消這些注釋,這實在是一件無趣而耗時的事!還好,還有更優雅的解決方法,就是在項目的prefix.pch文件里加入下面一段代碼,加入後,NSLog就只在Debug下有輸出,Release下不輸出了。如何實現:在-Prefix.pch(pch全稱是「precompiledheader」,也就是預編譯頭文件,該文件里存放的工程中一些不常被修改的代碼,比如常用的框架頭文件,這樣做的目的提高編譯器編譯速度。我們知道當我們修改一個工程中某個文件代碼時候,編譯器並不是重新編譯所有所有文件,而是編譯改動過文件的,假如pch中某個文件修改了,那麼pch整個文件里包含的的其他文件也會重新編譯一次,這樣就會消耗大量時間,所以它裡面添加的文件最好是是很少變動或不變動的頭文件或者是預編譯的代碼片段;)文件中添加[plain]viewplainprint?01.#ifdefDEBUG02.#defineNSLog()NSLog(__VA_ARGS__)03.#definedebugMethod()NSLog(@"%s",__func__)04.#else05.#defineNSLog()06.#definedebugMethod()07.#endif#ifdefDEBUG#defineNSLog()NSLog(__VA_ARGS__)#definedebugMethod()NSLog(@"%s",__func__)#else#defineNSLog()#definedebugMethod()#endif上段代碼的意思就是用宏指令做一個判斷,如果DEBUG為真,則編譯#ifdef到#endif宏定義,否則編譯器就不編譯;這個DEBUG在哪設置呢,在"Target>BuildSettings>PreprocessorMacros>Debug"里有一個"DEBUG=1"。設置為Debug模式下,Proct-->Scheme-->SchemeEditScheme設置BuildConfiguration成Debug時,就可以列印nslog了。設置Release,發布app版本的時候就不會列印了,提高了性能

㈣ .pch是什麼後綴名的文件(下面還有一個問題^_^)

pch是PreCompiled Headers文件,可以從某個頭文件生成,可以加快編譯速度,以vc6環境為例,在Project菜單中選擇Settings,C/C++頁面, Category中選擇Precompiled Headers, 選擇 Not using precompiled headers即可

㈤ c++語言當中的編程:#include「pch.h」。這段話是什麼意思呢

將「pch.h」這個庫函數裡面的函數定義和實現包含到當前的C++源代碼中,使得當前代碼中可以直接調用庫函數「pch.h」中的所有公有函數。

include是一個計算機專業術語,一指C/C++中包含頭文件命令,用於將指定頭文件嵌入源文件中。

include包含指令不僅僅限於.h頭文件,可以包含任何編譯器能識別的C/C++代碼文件,包括.c、.hpp、.cpp、.hxx、.cxx等,甚至.txt、.abc等等都可以。

預處理器發現 #include 指令後,就會尋找指令後面<>中的文件名,並把這個文件的內容包含到當前文件中。被包含文件中的文本將替換源代碼文件中的#include 指令, 就像你把被包含文件中的全部內容鍵入到源文件中的這個位置一樣。

(5)pch如何提高編譯速度擴展閱讀:

C++常用 include頭文件:

#include <assert.h> //設定插入點

#include <ctype.h> //字元處理

#include <errno.h> //定義錯誤碼

#include <float.h> //浮點數處理

#include <fstream.h> //文件輸入/輸出

#include <iomanip.h> //參數化輸入/輸出

#include <iostream.h> //數據流輸入/輸出

#include <limits.h> //定義各種數據類型最值常量

#include <locale.h> //定義本地化函數

#include <math.h> //定義數學函數

#include <stdio.h> //定義輸入/輸出函數

#include <stdlib.h> //定義雜項函數及內存分配函數

#include <string.h> //字元串處理

#include <strstrea.h> //基於數組的輸入/輸出

#include <time.h> //定義關於時間的函數

#include <wchar.h> //寬字元處理及輸入/輸出

#include <wctype.h> //寬字元分類

㈥ VC中".pch"是什麼文件,沒有.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文件.

注意:
A,實際上,由Appzard項目向導生成的默認的頭文件及CPP文件StdAfx.h和StdAfx.cpp可以是任何名字的.原因很簡單.但如果你要這樣做就要記得修改相應的Project->setting...下的幾個預編譯指令(/Yc,/Yu,/Yx,/Fp)的參數.
B.在任何一個包括了將要預編譯的頭文件而使用了.PCH文件的工程文件的開頭,一定必須要是在最開頭,你要包含那個指定生成.PCH文件的.H文件(通過.CPP文件包括,默認為StdAfx.cpp),如果沒包括將產生我最開頭產生的錯誤.如果不是在最開頭包括將產生讓你意想不到的莫名其妙錯誤,如若不信,盍為試之?
C.預編譯文件.PCH生成之很耗時間,而且生成之後它也很占磁碟空間,常在5-6M,注意項目完成之後及時清理無用的.PCH文件以節約磁碟空間.
D.如果丟了或刪了.PCH文件而以後要再修改工程文件時,可將指定的/Yc的.CPP文件(默認為StdAfx.cpp)重新編譯一次即可再次生成.PCH文件,不用傻傻的按F7或Rebuild All

㈦ VC++ 關於程序移植問題

*.ilk..........一種鏈接臨時文件
*.pch..........一種預編譯頭文件
*.pbd..........一種 PowerBuilder 動態庫,作為本地DLL的一個替代物
*.obj..........一種對象文件
*.idb..........一種 MSDev 中間層文件
*.pdb..........一種 3Com PalmPilot 資料庫文件沒裝VC的機器也能運行VC++的EXE文件,剛學VC時在網吧電腦上試過。你把整個文件過去,DEBUG里的EXE就可以執行。

㈧ m.2固態硬碟接pch慢一半,接cpu那裡就全速

m.2固態硬碟接pch慢一半,接cpu那裡就全速的情況只出現在100系列晶元組之前的主板上面。
100系晶元組以後的主板pch原生的M.2介面在性能上已經基本等同於之前所謂原生PCIe 3.0 x4標準的CPU/M.2介面,二者性能上幾乎沒有明顯差距。
而對於上一代的9系晶元組主板的PCH/M.2來說,受限於實際帶寬,這個介面的數據傳輸速度只有CPUM.2介面的一半。

㈨ C語言編譯錯誤C1010該怎麼解決

在編譯VC++6.0是,出現fatal error C1010: unexpected end of file while looking for precompiled header directive
的錯誤.
解決方法:
1、如果發生錯誤的文件是由其他的C代碼文件添加進入當前工程而引起的,則Alt+F7進入當前工程的 Settings,選擇C/C++選項卡,從Category組合框中選中Precompiled Headers,選擇Not Using Precompiled headers。確定。
2、在文件開頭添加:
#include "stdafx.h"
對預編譯頭文件說明如下:

所謂頭文件預編譯,就是把一個工程(Project)中使用的一些MFC標准頭文件(如Windows.H、Afxwin.H)預先編譯,以後該工程編譯時,不再編譯這部分頭文件,僅僅使用預編譯的結果。這樣可以加快編譯速度,節省時間。

預編譯頭文件通過編譯stdafx.cpp生成,以工程名命名,由於預編譯的頭文件的後綴是「pch」,所以編譯結果文件是projectname.pch。

編譯器通過一個頭文件stdafx.h來使用預編譯頭文件。stdafx.h這個頭文件名是可以在project的編譯設置里指定的。編譯器認為,所有在指令#include "stdafx.h"前的代碼都是預編譯的,它跳過#include "stdafx. h"指令,使用projectname.pch編譯這條指令之後的所有代碼。

因此,所有的CPP實現文件第一條語句都是:#include "stdafx.h"。

㈩ cpu和pch的速度

PCH和CPU之間的通訊速度就是1700M每秒。

閱讀全文

與pch如何提高編譯速度相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:581
python員工信息登記表 瀏覽:377
高中美術pdf 瀏覽:161
java實現排列 瀏覽:513
javavector的用法 瀏覽:982
osi實現加密的三層 瀏覽:233
大眾寶來原廠中控如何安裝app 瀏覽:916
linux內核根文件系統 瀏覽:243
3d的命令面板不見了 瀏覽:526
武漢理工大學伺服器ip地址 瀏覽:149
亞馬遜雲伺服器登錄 瀏覽:525
安卓手機如何進行文件處理 瀏覽:71
mysql執行系統命令 瀏覽:930
php支持curlhttps 瀏覽:143
新預演算法責任 瀏覽:444
伺服器如何處理5萬人同時在線 瀏覽:251
哈夫曼編碼數據壓縮 瀏覽:428
鎖定伺服器是什麼意思 瀏覽:385
場景檢測演算法 瀏覽:617
解壓手機軟體觸屏 瀏覽:352