讓QT編譯快一點(增加基礎標頭檔案)

2021-07-13 13:29:15 字數 2272 閱讀 5532

2、如何才能學到qt的精髓——提供了絕佳的物件間通訊方式,同時也是窺視gui具體實現的絕佳機會----

我是來反對樓上某些答案的。

我曾經用mfc寫了金山詞霸(大約20多萬行),又用qt寫了yy語音(大約100多萬行),算是對兩種框架都比較有經驗。

糾正幾個錯誤的認識。

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

#include

這兩個檔案裡又包含了幾乎所有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-********** -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++開啟編譯。

參考:

簡單12招讓Hive執行快一點,再快一點

hive可以讓你在hadoop上使用sql,但是在分布系統上的sql的調優是不同的。這裡有12個技巧能夠幫助你。hive並不是乙個關係型資料庫,但它假裝是大部分情況中的乙個。它有 執行sql,並且支援jdbc和odbc。這個啟示有利及不利的訊息 hive不執行查詢資料庫方式。這是乙個很長的故事,但是...

效能優化 讓nodejs再快一點

本文首次發表於但從node.js 服務端 的角度來看,js本身的執行時間卻變得至關重要,還是之前的例子,如果執行時間從30ms降到3ms,理論上qps就能提公升10倍,換句話說,以前要10臺伺服器才能扛住的流量現在1臺伺服器就能扛住,而且響應時間更短.那到底node端如何做效能優化呢?有兩種方法,一...

如何讓mysql索引更快一點

在 innodb 中,從二級索引回到主鍵索引查詢資料,這個過程稱作回表過程,而且這個回表過程是可以被優化的,這個優化就是利用覆蓋索引。先說結論,如果乙個索引的字段包含了所有要查詢的字段,這個索引就稱作覆蓋索引,覆蓋索引可以減少回表過程,能有效提高查詢效率。前面我們有說過,在 innodb 中資料都是...