QT5靜態編譯教程,主要針對vs2012
轉自
轉自
QT5,VS2012靜態編譯,所有的庫準備充分的話qwebkit也可以靜態編譯通過,但是我編譯的版本使用中如果用了QWEBVIEW控件在連接時會出錯。
注:我自己編譯的環境是:win server 2012 dc版 , vs2012 with update1,qt-everywhere-opensource-src-5.0.2,perl和rupy都是在qt官方給的地址下的最新的X64的,python是2.7 X64的、、、
本文主要針對qt 5.X版本,qt4.X的依賴沒那麼多,可以酌情參考下,但是好像用途不大、、
編譯器主要針對VS2012,vs2010和mingw的就編譯時參數換一個就行了,文中會有簡單提起、、、
編譯主要是靜態編譯,但是靜態編譯的話問題很多,我雖然不報錯編譯完成,但是使用沒測試,已知的是我編譯的版本qtwebkit使用時 QWEBVIEW控件在連接時會出錯。如果您要是動態編譯的話在編譯依賴庫(icu,openssl)時動態編譯就行了,在configure時不要-static選項即可。
雖然我編譯通過了,但是還是借鑑了網上很多教程,先發借鑑的鏈接,尊重版權:
http://www.ktao.net/archives/125 //這個編譯好像只編譯了qtbase,qtwebkit那塊原來我準備的連接庫不足,沒成功,就沒再測試。
http://www.cnblogs.com/wader/archive/2013/01/19/qt5_vc2012.html //這個是說動態連接的,但是很對。
http://qt-project.org/wiki/Building_Qt_5_from_Git //官方的編譯方法
1、準備編譯需要的環境
1.1準備編譯器
這個不需要多說了吧?就是安裝vs或者mingw、、、
vs系列可以去:http://msdn.itellyou.cn/ 下載,vs2012或者2010別用太低的版本,qt5要用c++11,只有這倆部分支持、、、
mingw您可以用qt官方mingw版的,自帶的版本,您也可以自己去下,用tdm-gcc安裝方便點:http://tdm-gcc.tdragon.net/download,您也可以自己搜、、
1.2準備其他需要的工具
qt5還需要perl,pyhon,rupy、、
Get Perl from: http://www.activestate.com/activeperl/downloads [activestate.com]
Get Python from: http://www.python.org/download/releases/ [python.org] //有說需要用2.7版版本的。3.3的不行,我是用的2.7,沒試試3.3的
Get Ruby from: http://www.rubyinstaller.org/ [rubyinstaller.org]
2.準備源碼
這個我啥也不用說了吧、、、去官網下載,http://releases.qt-project.org/digia/ 這兒可以下載最新的、、、或者用git下載(這個我也不會用)、、、
2.x配置源碼:如果需要靜態編譯就需要了,動態編譯請跳過:
先說vs的:修改 源碼目錄\qtbase\mkspecs\win32-msvc*\qmake.conf //win32-msvc*,*是您用的vs版本、、、
找到這幾句;
QMAKE_CFLAGS_WARN_OFF = -W0
QMAKE_CFLAGS_RELEASE = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
把MD和MDT改成MT和MTD,如下: //因爲md是動態連接運行時庫,MT是把運行時庫包含到程序裏
QMAKE_CFLAGS_WARN_OFF = -W0
QMAKE_CFLAGS_RELEASE = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MTd
再說mingw的: 修改 源碼目錄\qtbase\mkspecs\win32-g++\qmake.conf
把QMAKE_LFLAGS = 和QMAKE_LFLAGS_DLL = -shared 這兩句改成:QMAKE_LFLAGS = -static和QMAKE_LFLAGS_DLL = -static
3、準備編譯需要的庫
icu:這個qtwebkit必須的,qtbase也需要,但是沒有的話可以自動跳過。
地址ICU http://site.icu-project.org/download 下來源碼,用您所用的編譯器還要再編譯成lib或者dll,注意靜態鏈接動態鏈接。(注,vs2012下靜態編譯的lib下的lib不能用,要把icu開頭的lib掐年都加上個s,保險起見希望加s和不加s都存在吧。)
openssl: http://www.openssl.org/source/,注意這個編譯debug版的不好編譯,
ANGLE-library :這個是把opengl轉換連接到DirectX的,地址:http://code.google.com/p/angleproject/,資料不多,我也不會用,可以用 -opengl desktop選項就行了、、
SQLITE: http://www.sqlite.org/download.html 我不知道需要的是sqlite.dll還是源碼,還是sqllite.exe,所以我就把他們都房子一個目錄裏了。
注意:以上的您要注意debug和release版本、、還有動態編譯和靜態編譯、、、
4、配置環境變量,建議用個bat
附個我用的bat,上面兩個鏈接也有bat腳本,您根據自己的位置自己修改吧,還有就是mingw的別往加上mingw的環境到bat:
這是我自己配置的32位的qt編譯配置。
::配置路徑
set QT5_DIR=E:\qt\qtsrc //設置qt5的目錄
set THIRDPARTY_DIR=E:\qt\Build
::如果您用mingw可以在這兒設置下您的mingw目錄
set PATH=%PATH%;D:\Perl64\site\bin;D:\Perl64\bin;D:\Python27;D:\Ruby\bin; //用mingw就要加東西了
set PATH=%PATH%;%QT5_DIR%\bin;%QT5_DIR%\qtbase\bin;%QT5_DIR%\gnuwin32\bin;
::配置依賴,mingw的可能需要您手動加上庫和頭文件位置,vs的話您可以打開相應的VS* X86/64 本機命令提示符
set SQLITE3SRCDIR=%THIRDPARTY_DIR%\sqlite
set LIB=%LIB%;%THIRDPARTY_DIR%\icu\win32\lib;%THIRDPARTY_DIR%\icu\win32\libs;%THIRDPARTY_DIR%\openssl\openssl32\lib
set INCLUDE=%INCLUDE%;%THIRDPARTY_DIR%\icu\win32\include;%THIRDPARTY_DIR%\openssl\openssl32\include
set PATH=%PATH%;%THIRDPARTY_DIR%\icu\win32\bin;%THIRDPARTY_DIR%\openssl\openssl32\bin
::配置QT,爲了在輸入configure配置qt編譯選項,我就直接寫到bat了、、、
cd %QT5_DIR%
configure -prefix D:\QtSdk\Win32_static -opensource -confirm-license -static -platform win32-msvc2012 -release -c++11 -icu -openssl -opengl desktop -nomake demos -nomake examples -nomake tests-mp
解析下我用的選項:
-prefixD:\QtSdk\Win32_static 設置qt的安裝目錄,
-opensource -confirm-license qt的使用協議,這個是使用開源協議,並同意
-static 設置靜態編譯,動態編譯的話,去掉
-platform win32-msvc2012 設置編譯起類型,您根據情況歌換成win32-g++或者其他、、
-release 只編譯release版的,對應的-debug-and-release 編譯debug和release的、、只編譯debug的,我想您應該用不到吧、、
-c++11 開啓C++11的支持,好像這個選項默認就啓用了,gCC 4.7X支持大多數特性了,vs2012頁支持很多,vs2010支持少部分、、
-icu -openssl 使用icu和openssl
-opengl desktop 不準備ANGLE,就要加上這個選項,否則報錯、、
-nomake demos -nomake examples -nomake tests 不編譯示例,測試、、、
-mp 使用多核優化編譯、、
5、開始編譯,然後安裝
nmake(vs系列用), mingw32-make.exe(mingw用)、、jom(如果您準備jom代替nmake的話)
等吧、、漫長的等待、、然後安裝 在您前面的命令,例如 namke,安裝就是namke install
注意:安裝好後,您還要拷貝幾個icu的dll進您的安裝的qt裏、、
靜態編譯的qt,需要把icu\bin(64)裏的icudt*.dll和icuuc*.dll複製到qt的bin裏去、、
靜態編譯的話還需要把ICU\BIN(64)裏的部分lib複製到qt的bin裏面去,動態的話應該也需要,但是具體的還要您試下、、
我編譯的需要sicuuc.lib,sicuin.dll,sicudt.lib. //您要是感覺麻煩,全部都複製進去、、sicu*.lib前面的lib是自己加的、、、
mingw的編譯方法,您也可以看下前面幾位前輩的帖子:
鏈接:
http://www.qtcn.org/bbs/read-htm-tid-52265-fpage-2.html
http://www.qtcn.org/bbs/read-htm-tid-52231-fpage-2.html
注:我自己編譯的環境是:win server 2012 dc版 , vs2012 with update1,qt-everywhere-opensource-src-5.0.2,perl和rupy都是在qt官方給的地址下的最新的X64的,python是2.7 X64的、、、
本文主要針對qt 5.X版本,qt4.X的依賴沒那麼多,可以酌情參考下,但是好像用途不大、、
編譯器主要針對VS2012,vs2010和mingw的就編譯時參數換一個就行了,文中會有簡單提起、、、
編譯主要是靜態編譯,但是靜態編譯的話問題很多,我雖然不報錯編譯完成,但是使用沒測試,已知的是我編譯的版本qtwebkit使用時 QWEBVIEW控件在連接時會出錯。如果您要是動態編譯的話在編譯依賴庫(icu,openssl)時動態編譯就行了,在configure時不要-static選項即可。
雖然我編譯通過了,但是還是借鑑了網上很多教程,先發借鑑的鏈接,尊重版權:
http://www.ktao.net/archives/125 //這個編譯好像只編譯了qtbase,qtwebkit那塊原來我準備的連接庫不足,沒成功,就沒再測試。
http://www.cnblogs.com/wader/archive/2013/01/19/qt5_vc2012.html //這個是說動態連接的,但是很對。
http://qt-project.org/wiki/Building_Qt_5_from_Git //官方的編譯方法
1、準備編譯需要的環境
1.1準備編譯器
這個不需要多說了吧?就是安裝vs或者mingw、、、
vs系列可以去:http://msdn.itellyou.cn/ 下載,vs2012或者2010別用太低的版本,qt5要用c++11,只有這倆部分支持、、、
mingw您可以用qt官方mingw版的,自帶的版本,您也可以自己去下,用tdm-gcc安裝方便點:http://tdm-gcc.tdragon.net/download,您也可以自己搜、、
1.2準備其他需要的工具
qt5還需要perl,pyhon,rupy、、
Get Perl from: http://www.activestate.com/activeperl/downloads [activestate.com]
Get Python from: http://www.python.org/download/releases/ [python.org] //有說需要用2.7版版本的。3.3的不行,我是用的2.7,沒試試3.3的
Get Ruby from: http://www.rubyinstaller.org/ [rubyinstaller.org]
2.準備源碼
這個我啥也不用說了吧、、、去官網下載,http://releases.qt-project.org/digia/ 這兒可以下載最新的、、、或者用git下載(這個我也不會用)、、、
2.x配置源碼:如果需要靜態編譯就需要了,動態編譯請跳過:
先說vs的:修改 源碼目錄\qtbase\mkspecs\win32-msvc*\qmake.conf //win32-msvc*,*是您用的vs版本、、、
找到這幾句;
QMAKE_CFLAGS_WARN_OFF = -W0
QMAKE_CFLAGS_RELEASE = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
把MD和MDT改成MT和MTD,如下: //因爲md是動態連接運行時庫,MT是把運行時庫包含到程序裏
QMAKE_CFLAGS_WARN_OFF = -W0
QMAKE_CFLAGS_RELEASE = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MTd
再說mingw的: 修改 源碼目錄\qtbase\mkspecs\win32-g++\qmake.conf
把QMAKE_LFLAGS = 和QMAKE_LFLAGS_DLL = -shared 這兩句改成:QMAKE_LFLAGS = -static和QMAKE_LFLAGS_DLL = -static
3、準備編譯需要的庫
icu:這個qtwebkit必須的,qtbase也需要,但是沒有的話可以自動跳過。
地址ICU http://site.icu-project.org/download 下來源碼,用您所用的編譯器還要再編譯成lib或者dll,注意靜態鏈接動態鏈接。(注,vs2012下靜態編譯的lib下的lib不能用,要把icu開頭的lib掐年都加上個s,保險起見希望加s和不加s都存在吧。)
openssl: http://www.openssl.org/source/,注意這個編譯debug版的不好編譯,
ANGLE-library :這個是把opengl轉換連接到DirectX的,地址:http://code.google.com/p/angleproject/,資料不多,我也不會用,可以用 -opengl desktop選項就行了、、
SQLITE: http://www.sqlite.org/download.html 我不知道需要的是sqlite.dll還是源碼,還是sqllite.exe,所以我就把他們都房子一個目錄裏了。
注意:以上的您要注意debug和release版本、、還有動態編譯和靜態編譯、、、
4、配置環境變量,建議用個bat
附個我用的bat,上面兩個鏈接也有bat腳本,您根據自己的位置自己修改吧,還有就是mingw的別往加上mingw的環境到bat:
這是我自己配置的32位的qt編譯配置。
::配置路徑
set QT5_DIR=E:\qt\qtsrc //設置qt5的目錄
set THIRDPARTY_DIR=E:\qt\Build
::如果您用mingw可以在這兒設置下您的mingw目錄
set PATH=%PATH%;D:\Perl64\site\bin;D:\Perl64\bin;D:\Python27;D:\Ruby\bin; //用mingw就要加東西了
set PATH=%PATH%;%QT5_DIR%\bin;%QT5_DIR%\qtbase\bin;%QT5_DIR%\gnuwin32\bin;
::配置依賴,mingw的可能需要您手動加上庫和頭文件位置,vs的話您可以打開相應的VS* X86/64 本機命令提示符
set SQLITE3SRCDIR=%THIRDPARTY_DIR%\sqlite
set LIB=%LIB%;%THIRDPARTY_DIR%\icu\win32\lib;%THIRDPARTY_DIR%\icu\win32\libs;%THIRDPARTY_DIR%\openssl\openssl32\lib
set INCLUDE=%INCLUDE%;%THIRDPARTY_DIR%\icu\win32\include;%THIRDPARTY_DIR%\openssl\openssl32\include
set PATH=%PATH%;%THIRDPARTY_DIR%\icu\win32\bin;%THIRDPARTY_DIR%\openssl\openssl32\bin
::配置QT,爲了在輸入configure配置qt編譯選項,我就直接寫到bat了、、、
cd %QT5_DIR%
configure -prefix D:\QtSdk\Win32_static -opensource -confirm-license -static -platform win32-msvc2012 -release -c++11 -icu -openssl -opengl desktop -nomake demos -nomake examples -nomake tests-mp
解析下我用的選項:
-prefixD:\QtSdk\Win32_static 設置qt的安裝目錄,
-opensource -confirm-license qt的使用協議,這個是使用開源協議,並同意
-static 設置靜態編譯,動態編譯的話,去掉
-platform win32-msvc2012 設置編譯起類型,您根據情況歌換成win32-g++或者其他、、
-release 只編譯release版的,對應的-debug-and-release 編譯debug和release的、、只編譯debug的,我想您應該用不到吧、、
-c++11 開啓C++11的支持,好像這個選項默認就啓用了,gCC 4.7X支持大多數特性了,vs2012頁支持很多,vs2010支持少部分、、
-icu -openssl 使用icu和openssl
-opengl desktop 不準備ANGLE,就要加上這個選項,否則報錯、、
-nomake demos -nomake examples -nomake tests 不編譯示例,測試、、、
-mp 使用多核優化編譯、、
5、開始編譯,然後安裝
nmake(vs系列用), mingw32-make.exe(mingw用)、、jom(如果您準備jom代替nmake的話)
等吧、、漫長的等待、、然後安裝 在您前面的命令,例如 namke,安裝就是namke install
注意:安裝好後,您還要拷貝幾個icu的dll進您的安裝的qt裏、、
靜態編譯的qt,需要把icu\bin(64)裏的icudt*.dll和icuuc*.dll複製到qt的bin裏去、、
靜態編譯的話還需要把ICU\BIN(64)裏的部分lib複製到qt的bin裏面去,動態的話應該也需要,但是具體的還要您試下、、
我編譯的需要sicuuc.lib,sicuin.dll,sicudt.lib. //您要是感覺麻煩,全部都複製進去、、sicu*.lib前面的lib是自己加的、、、
mingw的編譯方法,您也可以看下前面幾位前輩的帖子:
鏈接:
http://www.qtcn.org/bbs/read-htm-tid-52265-fpage-2.html
http://www.qtcn.org/bbs/read-htm-tid-52231-fpage-2.html
附上我靜態編譯的icu和openssl、、VS2012 with update1 編譯的、、
64位的只有release版的、、
32位的有release和debug的,在同一目錄下,區別是debug的名字都比release多了個d
還有我用的bat、、、
http://pan.baidu.com/share/link?shareid=570262&uk=975261273
64位的只有release版的、、
32位的有release和debug的,在同一目錄下,區別是debug的名字都比release多了個d
還有我用的bat、、、
http://pan.baidu.com/share/link?shareid=570262&uk=975261273