古老的MSYS搭建的開發環境不只存在一些兼容性問題,並且還很繁瑣,幸虧mingw-build項目的開發者又作了更進一步的改進,他們開發了MSYS2項目。這個項目不只兼容性更好,並且引入了包管理機制,能夠直接從網上下載相關的軟件,並解決相關的依賴性問題。這個項目的主頁在
http://sourceforge.net/projects/msys2/
進入項目主頁後,根據你的系統選擇32位或者64位,如今你們使用的系統應該都是64位的了。下載好base包,而後解壓縮到什麼地方,通常我都是解壓縮到D盤的根目錄下,而後把bin目錄加入系統PATH。在MSYS2根目錄下有3個bat文件,它們是啓動MSYS2的命令,根據須要啓動,若是你不作開發,那麼只須要啓動msys2_shell.bat就足夠了;若是你須要軟件開發,那麼就啓動mingw64_shell.bat,它會在MSYS目錄下新建一個mingw64的目錄,裏面存放着mingw編譯器及其類庫。首次運行時會進行一些系統設定,等到命令提示符出現就完成了,此時須要退出MSYS2,而後從新進入。
在MSYS窗口左上角點擊那個圖標,彈出的菜單中有option,能夠設置MSYS2的一些參數,最主要的就是命令行窗口的大小和使用的字體,我喜歡看大一些的。
配置msys2,進入\msys64\etc,用文本編輯器打開profile文件,添加
html
複製代碼python
alias ls='ls --show-control-chars-F --color=tty'mysql
能夠解決中文顯示的問題,並且目錄、可執行文件、壓縮文件能夠以不一樣的顏色在msys命令行界面中顯示。
MSYS2使用了pacman包管理機制,這是從ArchLinux發行版引入的。在
http://xiexiejiao.cn/linux/pacman-introduce.html
有pacman的具體使用方法。咱們首先對系統升級
linux
複製代碼git
pacman -Syuweb
就會檢測整個系統能夠升級的組件,並自動下載安裝,這種狀況下推薦升級完成後重啓MSYS2環境,這樣可讓升級事後的庫文件發揮做用。
而後
sql
複製代碼shell
pacman -Sl數據庫
看一下到底有什麼包能夠安裝。注意那個字母是英文的「l」,而不是數字「1」。目前MSYS2還只有sourceforge一個鏡像,裏面的包分紅3個目錄mingw-w32、mingw-w64、msys,注意它們是不能混用的。從開發的角度來說,mingw的兼容性和性能都是最好的,因此優先使用mingw的包,注意32位和64位不能混用;msys的包主要是幫助bash解釋器更完整。也就是說基本原則是開發用的類庫和編譯器裝mingw的,bash腳本的解釋器裝msys的。
而後安裝Qt開發環境
windows
pacman -Sy mingw-w64-x86_64-qt-creator
pacman包管理器會自動解析其依賴性,自動安裝qt、mingw、libpng……若是中途下載出錯了,那就再次運行pacman命令,下載會繼續,下載下來的包保存在/msys64/var/cache/pacman/pkg目錄下,不用從新下載。
Qt在編譯和安裝時會識別編譯目錄和安裝目錄,並寫入Qt的配置文件,不過MSYS2提供了qtbinpatcher程序,能夠根據你的需求來自動修改Qt文件使其識別新的目錄,這在pacman包管理器中已經設定好了,qtbinpatcher會自動下載,也會自動運行。
而後把/msys64/mingw64/bin和/msys64/mingw64/x86_64-w64-mingw32/bin目錄加入系統PATH,以便各類程序可以被自動識別。Qt-creator的可執行文件在/msys/mingw64/bin
make並不是Qt必須依賴的包,而make是極重要的,因此
pacman -Sy make mingw-w64-x86_64-make
安裝make程序,其中make包是msys的,mingw-w64-x86_64-make包是mingw的,這兩個程序本質上是同樣的,可是有些軟件的安裝腳本時候只能識別其中一個,因此仍是兩個都裝上吧。
我通常還會再安裝
pacman -Sy p7zip tar wget patch diffutils git
注意不要安裝msys目錄下的gcc,它的運行效率比較低,並且沒有更多用於開發的包。基本原則是若是mingw帶了,那就不要安裝MSYS的包。
MSYS2還自帶了其餘一些可用於開發的包:
fftw能夠安裝
LAPACK因爲使用了官方blas,因此速度慢,推薦自行編譯OpenBLAS
Boost能夠安裝
nasm、yasm能夠安裝
Python、perl、ruby推薦第三方安裝。只是python有些類庫是Qt部分組件所須要的,因此在安裝Qt的時候就已經安裝了Python2,不過這和WinPython等第三方包不衝突。而perl是MSYS2中某些組件不可或缺的基礎,因此也已經有了。
這些包請酌情根據本身的須要安裝
若是你不須要使用更多複雜的功能,到這裏就已經足夠了,至關的傻瓜化,只要敲幾條命令就輕鬆解決全部問題。
下面是高級內容。
MSYS2項目的pacman源雖然提供了不少包,不過仍是有不少沒提供的,咱們只能本身處理
Qt數據庫組件
數據庫程序分紅兩部分,一部分是服務器,提供數據存取服務;另一部分是客戶端,給客戶機使用。這兩部分採用網絡通訊,因此只要網絡協議兼容就能夠,不須要二進制兼容,也就是說採用不一樣的編譯器在不一樣的軟硬件環境下開發出來的程序能夠交互。而實踐檢測MSVC編譯出來的數據庫服務器程序——不管是Oracle仍是MySQL或者PostgreSQL——都比較快,由於mingw在涉及到文件IO的部分多了一層虛擬層,因此比較慢,而數據庫對存取操做要求比較多。因此服務器通常使用官方發佈的MSVC編譯的二進制版本,而咱們使用Qt只開發客戶端,因此用mingw也沒問題。若是是Linux系統,gcc是全面優化的,運行速度和穩定性全面超越了windows,考慮到跨平臺性,我更願意使用mingw開發,待代碼測試沒有問題再最後用MSVC編譯一次。
這裏採用PostgreSQL講解使用相同編譯器時如何安裝驅動,後面採用MySQL講解使用不一樣編譯器時如何安裝驅動
MSYS2沒有自帶Qt的數據庫組件。首先
pacman -Sy mingw-w64-x86_64-postgresql
安裝PostgreSQL,咱們不用它來作服務器,只是使用其中的頭文件和庫文件開發本身的客戶端。
而後到Qt官網下載源碼包,注意源碼包的版本要和pacman安裝的Qt包的版本一致,並且要windows下那個zip包,不要那個.tar.gz格式的。解壓縮以後以MSYS命令行進入
\qt-everywhere-opensource-src-5.2.0\qtbase\src\plugins\sqldrivers\psql
而後
qmake
mingw32-make
mingw32-make install
Qt訪問PostgreSQL的插件就編譯好了,並安裝在\msys64\mingw64\plugins\sqldrivers\qsqlpsql.dll和qsqlpsqld.dll,分別對應release版和debug版。
PostgreSQL的服務器推薦使用官網提供的MSVC編譯出來的二進制文件。
由於使用了pacman安裝PostgreSQL,因此qmake能夠自動識別PostgreSQL的頭文件和庫文件。
可是MySQL就沒有這幸運了。
考慮到MySQL被Oracle收購以後愈發封閉,因此推薦使用MariaDB來做爲替代品,安裝好以後能夠在MariaDB的目錄下找到\include\mysql和lib兩個目錄,這裏面存放着咱們開發客戶端所需的頭文件和庫文件。不過庫文件是MSVC編譯出來的,mingw不能直接使用,因此要處理一下。在
http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs
介紹了MSVC和mingw文件格式不一樣時所必須採用的一些措施,按照其上所述,首先到
http://wyw.dcweb.cn/download.asp?path=&file=reimp_new.zip
下載reimp程序的源代碼,解壓縮以後進入src目錄,而後mingw32-make,會生成reimp.exe程序,把這個程序放到/msys/mingw64/bin目錄下使用。根據
http://blog.csdn.net/vah101/article/details/5974782
所述,以MSYS命令行進入MariaDB的lib子目錄,而後
reimp -d libmysql.lib
會生成libmysql.def文件,而後
dlltool -k -d libmysql.def -l libmysql.a
就會生成mingw可以使用的libmysql.a文件。相似的對debug版的libmysqld.lib文件如此操做也能夠獲得libmysqld.a
而後修改\qt-everywhere-opensource-src-5.2.0\qtbase\src\plugins\sqldrivers\mysql下的mysql.pro,添加
INCLUDEPATH +="/mariadb/include/mysql"
LIBS += "/mariadb/lib/libmysql.a"
MySQL提供了release和debug兩個版本的庫文件,這裏卻只使用了release的,由於筆者實踐檢驗,debug版的連不上數據庫。至於具體的路徑名請諸位根據本身機器上的配置進行調整,記得用雙引號括起來,不然一旦路徑名中包含空格就會出錯。
而後以MSYS2命令行進入\qt-everywhere-opensource-src-5.2.0\qtbase\src\plugins\sqldrivers\mysql
qmake
mingw32-make
mingw32-make install
Qt訪問MySQL的插件就編譯好了,並安裝在\msys64\mingw64\plugins\sqldrivers\qsqlmysql.dll和qsqlmysqld.dll,分別對應release版和debug版
可是別忘了,qsqlmysql.dll依賴MariaDB的libmysql.dll,因此還要把MariaDB的libmysql.dll加入系統PATH,方法很簡單,只要把這兩個dll文件複製到/msys64/mingw64/bin目錄下就能夠了。
其實PostgreSQL的Qt插件也能夠按照MariaDB的方法來安裝,也就是用官方發佈的MSVC編譯出來的二進制PostgreSQL自帶的庫文件和頭文件生成.a文件後再用mingw編譯連接。只不過msys提供了mingw編譯好的PostgreSQL包就圖省事,固然也是爲了介紹一下當數據庫和Qt都是mingw編譯的狀況下,該如何處理;而MariaDB的插件安裝就是介紹了一下不一樣編譯器編譯的狀況下,該如何處理。關於MSVC和mingw混用的問題,網上還有不少文章,不一一列舉。
http://blog.sina.com.cn/s/blog_6b3861870100qrvd.html
有Qt使用SQL的例子,你們能夠本身測試一下。若是最後輸出爲OK那就沒問題,除了QMYSQL也能夠測試QPSQL。若是在混用MSVC和mingw時,沒有使用reimp把MSVC的lib轉化爲mingw的a文件,那麼雖然程序能夠編譯出來,可是執行會出錯。
安裝qwt。qwt是Qt一個繪製圖表的插件,能夠提供相似excel的效果,有普遍使用。Qt下繪製圖表的插件不止qwt一種,不過只有它是免費開源的。首先到
http://sourceforge.net/projects/qwt/?source=directory
下載其源代碼,配合Qt-5.2的版本是qwt-6.1,不要使用老版本。
解壓縮源代碼後
qmake
mingw32-make
不用mingw32-make install
由於不能識別正確目錄,因此不能正確安裝。手動安裝的方法以下:
複製\qwt-6.1.0\lib下的兩個dll文件到/msys64/mingw64/bin
複製\qwt-6.1.0\lib下的兩個.a文件到/msys64/mingw64/x86_64-w64-mingw32/lib
複製qwt-6.1.0\src下全部的.h文件到/msys64/mingw64/x86_64-w64-mingw32/include/qwt
複製\qwt-6.1.0\designer\plugins\designer\qwt_designer_plugin.dll文件到\msys64\mingw64\plugins\designer而後啓動qtdesigner,看看可否識別qwt插件。
備註:
適當學下pacman指令;