QT VS2017 32位和64位動態與靜態編譯及他人使用注意

一、下載源碼包

首先,我們需要從Qt官網(地址:http://download.qt.io/official_releases/qt/5.9/5.9.7/single/ )下載對應的Qt源碼。在這裏,我以在Windows下編譯Qt程序爲例。下載後是一個壓縮文件,將它解壓到一個空間較大的磁盤下面。一會靜態編譯需要佔用大量磁盤空間。(謹慎起見,請至少保證該磁盤下有10G左右空間。)
在這裏插入圖片描述

二、編譯環境

以下是編譯時需要的工具,在編譯之前,請務必安裝!
安裝都比較簡單。這裏直接給出官網下載的鏈接。最後記得添加到環境變量(安裝時把‘’添加到PATH環境“選項勾起就可以了,或者在安裝後手動添加也可以)。我下載的都是最新版本。ruby、perl、python安裝的時候會添自己添加到環境變量,python安裝的時候需要自己選擇是否增加到環境變量,默認是沒勾選的。JOM需要自己把安裝路徑增加到環境變量。完整的環境變量配置見下圖。
Ruby version 1.9.3 or later
Perl version 5.12 or later
Python version 2.7.5 or later
JOM
在這裏插入圖片描述
軟件打包下載:https://download.csdn.net/download/qing666888/10870658

建議安裝jom,來替換nmake進行編譯,可以充分利用CPU多核的能力,否則估計你會中途吐血的。jom是nmake的多線程版,nmake不支持多線程,單線程編譯速度太慢了。

  1. 在開始菜單中,找到“適用於 VS 2017 的 x64 本機工具命令提示“ 或者 “x64 Native Tools Command Prompt for VS 2017”。根據自己要求找到對應的32位或64位版本。
    在這裏插入圖片描述
  2. 將當前命令行目錄切換到qt源碼解壓後的目錄下。

三、編譯靜態庫

  1. 在編譯之前記得先將所有的殺毒軟件關掉(避免誤殺)。

  2. 然後進入解壓後的Qt源碼文件夾下的qtbase/mkspecs下,找到win32-msvc文件夾。
    在這裏插入圖片描述

  3. 找到相應的文件後,如果需要編譯靜態庫,則修改其內容。在這裏也就是msvc-desktop.conf這個文件。
    路徑:qtbase\mkspecs\common\msvc-desktop.conf

  4. 大概在38行左右。將MD改成MT,MDd改成MTd,對應關係如下:
    靜態編譯: debug狀態下 – MTd; release狀態下 – MT
    動態編譯: debug狀態下 – MDd;release狀態下 – MD

QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MD 
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MD
QMAKE_CFLAGS_DEBUG = -Zi -MDd

變爲:

QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MT 
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MT
QMAKE_CFLAGS_DEBUG = -Zi -MTd
  1. 然後執行下面的配置,最後nmake 和nmake install,如果安裝了jom,則執行jom和jom install。
configure -confirm-license -opensource -platform win32-msvc -debug-and-release -static -static-runtime \
 -force-debug-info -opengl dynamic -prefix "../msvc2017_static" -qt-sqlite -qt-pcre -qt-zlib -qt-libpng \
 -qt-libjpeg -opengl desktop -qt-freetype -nomake tests -no-compile-examples -nomake examples

四、編譯動態庫

  1. 編譯debug版
configure -confirm-license -opensource -platform win32-msvc -debug -shared -force-debug-info \
 -opengl dynamic -prefix "../msvc2017_debug" -qt-sqlite -qt-pcre -qt-zlib -qt-libpng -qt-libjpeg \
 -opengl desktop -qt-freetype -nomake tests -no-compile-examples -nomake examples

直接nmake然後nmake install 就行了,如果安裝了jom,則執行jom和jom install。

  1. 編譯release版
configure -confirm-license -opensource -platform win32-msvc -release -shared -force-debug-info \
 -opengl dynamic -prefix "../msvc2017_release" -qt-sqlite -qt-pcre -qt-zlib -qt-libpng -qt-libjpeg \
 -opengl desktop -qt-freetype -nomake tests -no-compile-examples -nomake examples

再nmake然後nmake install 就行了,如果安裝了jom,則執行jom和jom install。

  1. 編譯debug+release版(推薦),Qt安裝包裏有VS2017 64位版本,我們只需編譯32位的版本。
configure -confirm-license -opensource -platform win32-msvc -debug-and-release -shared -force-debug-info \
-opengl dynamic -prefix "../msvc2017_32" -qt-sqlite -qt-pcre -qt-zlib -qt-libpng -qt-libjpeg  \
-opengl desktop -qt-freetype -nomake tests -no-compile-examples -nomake examples

再nmake然後nmake install 就行了,如果安裝了jom,則執行jom和jom install。

注:如果上述configure命令執行報錯,把後面的分行符去掉,三行合成一行執行。

五、完成編譯注意事項

  如果沒有意外,那麼我們就會在之前設定好的路徑下看到編譯好的文件。至此,整個Qt源碼編譯過程也就結束了。最後把生成文件拷貝到如下目錄,重新配置一下VS或者QtCreator即可。
在這裏插入圖片描述

  如果移動了QT SDK的安裝目錄,即編譯後的SDK發送給別人使用,或者修改了SDK的目錄名稱等等,則需注意會各種報錯,這是因爲qt 將路徑硬編碼到了qmake.exe中, 但是會優先尋找qt.conf ,如果有就使用qt.conf中配置的路徑,沒有則使用默認路徑,在新編譯的Qt版本bin目錄下缺少配置文件qt.conf,我們把msvc2017_64\bin\qt.conf配置文件,拷貝一份到msvc2017_32\bin目錄下目錄下即可:也可以自己手動在qmake目錄下新建一個qt.conf文件,注意,編碼一定要ANSI格式,不能用UTF-8。路徑分隔符用"/"或“\\”)。

[Paths]
Prefix=..

在這裏插入圖片描述
靜態編譯如果提示:: error: LNK1181: 無法打開輸入文件“C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86\winspool.lib”,則需要安裝對應版本的windows SDK。因爲別人靜態編譯依賴的此SDK。安裝SDK到報錯所在目錄。同時要看清楚別人分享的編譯版本是Debug還是Release,還是兩個版本都包含的,要不然別人只提供的編譯的Release版本,你往死裏編譯Debug版本不報錯纔怪

他人編譯的各種版本(所有版本:只有Release!!!!!!!!)
http://fsu0413.github.io/QtCompile

參考文章:
https://blog.csdn.net/qq_16395987/article/details/84564728
https://blog.csdn.net/wyansai/article/details/80600293

QWebEngine編譯參考:
(需要很長時間和硬盤內存空間,請確保硬盤空間在50G以上。編譯時間較長):
https://blog.csdn.net/u013125105/article/details/83379487

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章