一、為什么要靜態編譯
用QtCreator編譯程序時,使用的是動態編譯。編譯好的程序在運行時需要另外加上相應的Qt庫文件,一大堆dll文件。如果想將生成的程序連同所需要的庫一起完整地打包成一個可執行程序,那就需要使用靜態編譯。Qt官方不提供靜態編譯好的安裝包,所以需要我們在自己的電腦上靜態編譯。而且exe文件會比動態編譯的要小上很多。
二、源碼下載
打開網址選擇一般選擇最新的版本,根據QT官方Qt5.12這一版有長期的技術支持,大約5年的樣子穩定性相對來說比較高,所以建議選擇這個版本的源碼來編譯。 我編譯的時候才是Qt5.12.2,MD我前天剛編譯好今天就跟新到Qt5.12.3。傷不起啊。
三、安裝編譯工具
安裝的編譯工具有:
一般來說下載這三個工具就可以,記得要設置環境變量,當然你要編譯MSVC版的安裝Visual Studio2017,並且安裝它。
四、編譯環境選擇
這次我選擇編譯x86的靜態庫,原因很簡單。64位的系統可以運行32位的程序,但是反之則不可以,所以選擇編譯環境位x86
五、編譯參數配置
打開源碼所在位置( qtbase\mkspecs\common\msvc-desktop.conf )找到如圖所示位置文件並修改保存:
六、開始編譯
- 先打開命令工具提示切換到源碼所在位置
- 切換完成之后輸入如下命令(建議復制粘貼):
configure.bat -static -prefix "D:\Qt\msvc2017_static" -confirm-license -opensource -debug-and-release -platform win32-msvc -nomake examples -nomake tests -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -mp
configure.bat
-static //指明是靜態編譯
-prefix "D:\Qt\msvc2017_static" //指明安裝的目錄
-confirm-license -opensource //指明是開源版本的qt
-debug-and-release //指明需要debug版和release版,可以單獨選擇release版
-platform win32-msvc //指明使用msvc編譯
-nomake examples -nomake tests //不編譯樣例
-plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg //可選插件
-opengl desktop
-mp //多核編譯
-
make
在命令提示工具輸入:
nmake
此時源碼開始編譯,編譯時長根據電腦的配置而異,我的電腦I7 7500U Inter240GSSD,大約從早上上班9點種開始編譯,在下午6點鍾下班的時候沒有編譯完,等第二天早上上班之后發現已經編譯完了,具體多長時間也不知道。樂觀12+小時以上。 -
nmake install
安裝完成之后在命令提示工具輸入:
nmake install
此時編譯號的源碼開始安裝,這個安裝時長大概2個小時左右吧。安裝完成之后就可以使用了。
七、開始使用
源碼編譯安裝完成之后,需要安裝Qt Creator工具來使用我們剛剛編譯好的靜態QT。首先下載 [QtCreator](http://download.qt.io/official_releases/qtcreator/)
依然選擇最新版下載並安裝。安裝完成之后打開開發工具我們需要配置一下才能使用。
** 注意事項:在
配置完以上內容就可以開始放心的編譯自己的程序。測試了一下空白程序在release模式下大概11M左右,還是蠻大的吧,優勢就是不必擔心丟失DLL文件而報錯了。
八、注意事項
-
在添加Qt Versions時可能會報“qmlscene 未安裝”,出現黃色感嘆號。這是你只需將安裝Qt官方動態編譯的安裝包拷貝相應目錄里面的“qmlscene.exe”到我們剛剛編譯安裝的
目錄下重新添加就ok了。 -
當你下載別人編譯好的靜態庫或者把自己編譯的庫移動了一個位置時Qt Versions 位提示錯誤“qt未正確安裝,請使用make install進行安裝”。不要怕其實不用重新編譯安裝的,只需在
目錄下新建一個文本文檔“qt.txt”,然后輸入
[Paths]
Prefix=D:/qt/static
** 注意:輸入完之后保存時選擇“ANSI”,另存為的時候有選擇提示選擇“ANSI”類型即可。最后將qt.txt改為qt.conf。 **
九、結尾
做好上述8個步驟之后我們的靜態環境就徹底搭建好了,然后就歡樂的碼代碼吧。
附上自己編譯的靜態庫和編譯工具 :鏈接:https://pan.baidu.com/s/1iB2zoqVTa_nub4OLOmQlsw 提取碼:6f2f