利用MSVC14 (Microsoft Visual Studio 2015) 編譯靜態 Qt 5.8
事前準備
1.下載安裝Perl (https://www.activestate.com/activeperl/downloads)
2.下載安裝Python (https://www.python.org/downloads/)
3.已安裝Microsoft Visual Studio(最好是Professional版本)
4.下載"qt-everywhere-opensource-src-5.8.0" (http://download.qt.io/official_releases/qt/5.8/5.8.0/single/)
建立Static資料夾
C:\Qt\Static
將"qt-everywhere-opensource-src-5.8.0"解壓縮到C:\Qt\Static
會花上一些時間
編輯C:\Qt\Static\qt-everywhere-opensource-src-5.8.0\qtbase\mkspecs\common\msvc-desktop.conf
找到以下代碼,將MD改成MT
QMAKE_CFLAGS_RELEASE = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
像這樣
QMAKE_CFLAGS_RELEASE = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MTd
開啟Developer Command Prompt for VS2015,用Administrator開啟
利用
Developer Command Prompt ,開啟C:\Qt\Static\qt-everywhere-opensource-src-5.8.0
cd C:\Qt\Static\qt-everywhere-opensource-src-5.8.0
執行以下指令
configure -static -debug-and-release -prefix "C:\Qt\Static\5.8.0" -platform win32-msvc2015 -qt-zlib -opensource -confirm-license -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -sql-odbc -sql-sqlite -skip qt3d -skip qttools -opengl desktop -make libs -nomake tools -skip qtdoc -skip qtwayland -skip qtwebview -skip qtwebengine -skip qtwebchannel -no-qml-debug -skip qtscript -no-icu -no-compile-examples -nomake examples -nomake tests
如果你用的Visual Studio是Express版的,請skip qtspeech,他會用到
Professional的檔案。
configure -static -debug-and-release -prefix "C:\Qt\Static\v5.8.0" -platform win32-msvc2015 -qt-zlib -opensource -confirm-license -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -sql-odbc -sql-sqlite -skip qt3d -skip qttools -skip qtspeech -opengl desktop -make libs -nomake tools -skip qtdoc -skip qtwayland -skip qtwebview -skip qtwebengine -skip qtwebchannel -no-qml-debug -skip qtscript -no-icu -no-compile-examples -nomake examples -nomake tests
我沒有專業版的MSVC,所以我也不確定,第一個指令會部會成功,如果失敗了,注意一下error message,把該功能或是模組取消掉。
你可以檢查qt-everywhere-opensource-src-5.8.0資料夾,裡面包含的資料夾是Qt模組,
用
-skip
取消
取消功能則是把-qt-xxx,變成-no-xxxx
EX:
-qt-zlib
-no-zlib
這個動作會花上很多時間,我bulid了10個多小時
nmake
如果遇到編譯字串錯誤代碼,可以先下
set _CL_=/utf-8
再下
nmake
nmake install
成功後,會在C:\Qt\Static多出5.8.0資料夾
打開Qt Creator的Tools / Options
點選Add
選擇C:\Qt\Static\5.8.0\bin\qmake.exe檔案
命名version name,記得按下Apply
點選Kits
注意以下這幾點,按下OK
打開一個專案,點選Projects裡的qt static 5.8.0
接下來就能在Run裡面看到了
注意!!!
當你編譯好Qt庫後,你想更換路徑,但你發現Qt Creator 會出現
"qt version is not properly installed please run make install"
那是因為,當你configure prefix路徑時,已經固定了,所以當你將qmake移到其他位置或是電腦使用時,會出現上面的錯誤。
此時可以在qmake檔案路徑下,新增"qt.conf",內容如下
[paths]
Prefix=C:/Qt/Static_x86/5.8.0/
紅字部分為新的prefix路徑位置。
成功建立執行檔後,把檔案放到其他電腦執行時,會出現缺少msvcp140.dll、vcruntime140.dll。
此時我複製這兩個檔案到執行檔目錄時,又出現(0xc000007b)的錯誤,上網查才發現,是我複製到錯誤的檔案。
我一開始複製的是MSVC安裝路徑下的msvcp140.dll、vcruntime140.dll,當我貼上C:\Windows\System32\路徑下的檔案時,就可以正常跑了。
參考資料
http://amin-ahmadi.com/2016/09/22/how-to-build-qt-5-7-statically-using-msvc14-microsoft-visual-studio-2015/