使用VS2010編譯Qt 5.6.1過程記錄

由于Qt官方發布的Qt 5.6.1二進制安裝包沒有對應VS2010版本的,而我的電腦上只安裝了VS2010,因此只能自己編譯。
本文記錄本人的編譯安裝過程,以及其中遇到的一些問題。

本文使用VS2010 32位編譯Qt 5.6.1。

1. 下載Qt源代碼

Qt源代碼下載地址:https://www.qt.io/download-open-source/
或直接到下載匯總目錄:http://download.qt.io/archive/
其中,Qt 5.6.1的下載目錄為:http://download.qt.io/archive/qt/5.6/5.6.1/
見下圖:

從上圖中可以看到,Qt 5.6.1官方提供的VS版本只有VS2013和VS2015。
由于我的電腦上只有VS2010(至于原因,對我來說VS2010是用得最久的,并且越高的版本的VS占用的空間越大,
微軟的東西實在龐大得嚇人,所以一直沒有更換更高版本的VS),所以只能下載Qt源碼自己編譯。

Qt 5.6.1源碼在上圖中的single目錄中,見下圖:

上圖中的幾個壓縮包的內容是一樣的,但是.7z格式的文件是最小的,所以就下載.7z格式的就行啦(前提是你的電腦能解壓.7z格式的壓縮包)。

2. 將Qt源代碼壓縮包解壓

下載后得到qt-everywhere-opensource-src-5.6.1.7z文件。
然后將此壓縮包解壓,此時需要注意解壓到的目錄位置:由于編譯(即執行nmakejom)后得到的文件(包括.prl.dll等)會攜帶源代碼路徑信息,
所以最好一開始就把源代碼放在一個對的位置,并且編譯后不要移動或刪除。
(注:但執行nmake installjom install后源代碼路徑信息就被去掉了,所以上面一段可以不必在意。)

我之前曾特意為此在虛擬機中測試安裝了qt-opensource-windows-x86-msvc2015-5.6.1.exe,安裝后安裝目錄的結構如下:

  1. D:\ProgramFiles\Qt\5.6.1
  2. ├─5.6
  3. ├─msvc2015
  4. └─Src
  5. ├─Docs
  6. ├─Examples
  7. ├─Tools
  8. └─……(其他不重要的目錄或文件)

因此,我直接將qt-everywhere-opensource-src-5.6.1.7z解壓到D:\ProgramFiles\Qt\5.6.1\5.6目錄下,
然后將得到的文件夾qt-everywhere-opensource-src-5.6.1重命名為Src

3. 安裝依賴環境

根據Qt 5.6.1源代碼中的README可以知道,編譯Qt 5.6.1之前需要安裝幾個環境:

  • Perl version 5.12 or later [http://www.activestate.com/activeperl/]
  • Python version 2.7 or later [http://www.activestate.com/activepython/]
  • Ruby version 1.9.3 or later [http://rubyinstaller.org/]
  • ICU

Qt 5 can make use of the ICU libraries providing Unicode and Globalization
support (see http://site.icu-project.org/). They are required for building QtWebKit.
On Windows, they need to be manually installed and the "include" and "lib"
folders of the ICU installation must be appended to the INCLUDE and LIB
environment variables after calling the Windows SDK setup script.
The "bin" folder of the ICU installation should be appended to the PATH
environment variable in order to for the DLLs to be found at run-time.

  • DirectX SDK (DirectX 9 or 11)

For Qt Quick 2 to work, a graphics driver that provides OpenGL 2.1 or higher is required.
The default driver from Windows is OpenGL 1.1. Qt includes a version of the ANGLE project
which is included from the Windows Qt installers.
ANGLE implements the OpenGL ES 2.0 API on top of DirectX 11 or DirectX 9.
ANGLE requires that the DirectX SDK is installed when building Qt.

于是,我安裝了如下幾項:

  • ActivePerl 5.22.1.2201
  • Python 2.7.11
  • Ruby 2.2.4
  • icu4c 54.1
  • DXSDK_Jun10

(注:我將ICU安裝壓縮包icu4c-54_1-Win32-msvc10.zip解壓到D:\ProgramFiles\ICU目錄下,
并重命名為icu4c-54_1-Win32-msvc10,即得到D:\ProgramFiles\ICU\icu4c-54_1-Win32-msvc10。下面會用到這個目錄。)

4. 開始編譯安裝

D:\ProgramFiles\Qt\5.6.1\5.6\Src目錄中新建一個批處理文件,命名為my_build_vs2010_x86.bat,用文本編輯器打開之,編輯內容如下:

  1. ECHO on
  2. ECHO 本批處理腳本參考:http://doc.qt.io/qt-5/windows-building.html
  3. ECHO http://www.myext.cn/other/a_30787.html
  4. ECHO;
  5. ECHO 設置Microsoft Visual Studio 2010 x86環境...
  6. CALL "D:\ProgramFiles\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
  7. ECHO;
  8. ECHO 設置Qt源代碼路徑...
  9. SET QTSRC_DIR=D:\ProgramFiles\Qt\5.6.1\5.6\Src
  10. SET PATH=%QTSRC_DIR%\qtbase\bin;%QTSRC_DIR%\gnuwin32\bin;%PATH%
  11. SET QMAKESPEC=win32-msvc2010
  12. ECHO;
  13. ECHO 設置ICU路徑...
  14. SET INCLUDE=D:\ProgramFiles\ICU\icu4c-54_1-Win32-msvc10\include;%INCLUDE%
  15. SET LIB=D:\ProgramFiles\ICU\icu4c-54_1-Win32-msvc10\lib;%LIB%
  16. SET PATH=D:\ProgramFiles\ICU\icu4c-54_1-Win32-msvc10\bin;%PATH%
  17. ECHO;
  18. ECHO 按任意鍵,進行configure...
  19. @PAUSE>NUL
  20. ECHO 開始configure...
  21. CALL configure -prefix %QTSRC_DIR%\..\msvc2010_x86 -opensource -confirm-license -platform win32-msvc2010 -debug-and-release -nomake tests -nomake examples -opengl dynamic -mp
  22. ECHO;
  23. ECHO 按任意鍵,開始make...
  24. @PAUSE>NUL
  25. CALL jom
  26. ECHO;
  27. ECHO 按任意鍵,開始install...
  28. @PAUSE>NUL
  29. CALL jom install
  30. REM 重新配置和編譯請使用
  31. REM nmake distclean jom clean

(注:上面腳本中的編譯步驟使用了Qt Creator的jom工具,如果還未安裝Qt Creator,則需要將上面腳本中的jom替換成nmake。)

上面這個腳本里面已經寫了較全面的注釋,在此就不一一解釋了。

然后再在此目錄下新建一個批處理文件,命名為my_build_vs2010_x86_and_log.bat,用文本編輯器打開之,編輯內容如下:

  1. @CALL %SystemRoot%\system32\cmd.exe /E:ON /V:ON /k "my_build_vs2010_x86.bat" 2>&1 |mtee/d/t/u/+ my_build_vs2010_x86.log

其中的mtee是一個用于Windows批處理輸出重定向的一個小工具,可以到此下載,
下載之后安裝,把mtee.exe所在路徑添加到系統Path環境變量中就可以了。
使用mtee是為了在命令行窗口顯示輸出的同時將過程中的所有輸出記錄到文件。

然后雙擊運行my_build_vs2010_x86_and_log.bat,即可自動完成Qt 5.6.1的編譯和安裝。

運行結束后得到log文件my_build_vs2010_x86.log即為過程中的所有輸出的記錄。

5. 后續處理

編譯安裝完成之后,可以直接把源代碼目錄Src刪除。
如果想保留源代碼,可以在源代碼目錄執行jom cleannmake distclean(因為編譯過程在源代碼目錄產生了大量的中間文件),
或者可以將源代碼目錄刪除后重新把之前下載的源代碼壓縮包解壓到相同位置。

最后就是在Qt Creator中配置Qt路徑了,比較簡單,就不再贅述了。

至此,Qt 5.6.1在VS2010平臺下的編譯全部完成。



來自為知筆記(Wiz)


轉載于:https://www.cnblogs.com/jloveu/p/build-Qt561-on-VS2010-record.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457100.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457100.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457100.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

golang 指針

指針1、簡單的定義一個指針package mainimport "fmt"func main(){var p *inti :2p &ifmt.Println("memory address i:",p) } //執行結果: memory address i: 0xc42000a2e02、打印指針的值package mainimport "fmt"func main(){v…

php防錯處理,更好的PHP錯誤處理

錯誤類型PHP 主要有兩種錯誤:觸發錯誤和異常。其中觸發錯誤大概可以分為:編譯錯誤、引擎錯誤和運行時錯誤,其中前兩個是無法捕獲的;異常都是可以捕獲的,當沒有嘗試捕獲時則會中斷代碼。觸發錯誤可以通過 error_get_las…

Windows安裝Apache注冊服務出現(OS 5)拒絕訪問。 : AH00369: Failed to open the Windows service manager,

windows安裝Apache,注冊服務出現“(OS 5)拒絕訪問。 : AH00369: Failed to open the WinNT service manager..."錯誤 在安裝Apache的時候,我下載的是zip格式,不是msi安裝版,需要自己注冊服務,才能在桌面任務欄里有…

算法與數據結構(三) 二叉樹的遍歷及其線索化(Swift版)

前面兩篇博客介紹了線性表的順序存儲與鏈式存儲以及對應的操作,并且還聊了棧與隊列的相關內容。本篇博客我們就繼續聊數據結構的相關東西,并且所涉及的相關Demo依然使用面向對象語言Swift來表示。本篇博客我們就來介紹樹結構的一種:二叉樹。在…

關于android開發時,發生Error infalting classa com.baidu.mapapi.map.MapView的解決辦法

1.問題描述:百度地圖SDK中 Error: infalting classa com.baidu.mapapi.map.MapView 。 2.解決辦法:通過1個多小時的上網搜索,最終發現很多網友之所以出現這方面的問題有以下幾種原因: (1).忘…

c++動態綁定的技術實現

1 什么是動態綁定 有一個基類,兩個派生類,基類有一個virtual函數,兩個派生類都覆蓋了這個虛函數。現在有一個基類的指針或者引用,當該基類指針或者引用指向不同的派生類對象時,調用該虛函數,那么最終調用的…

linux替換某個文件夾下所有文件,Linux 批量查找并替換文件夾下所有文件的內容...

1.批量查找某個目下文件的包含的內容cd etcgrep -rn "查找的內容" ./2.批量替換某個目下所有包含的文件的內容cd etcsed -i "s/查找的內容/替換后的內容/g" grep -rl "查找的內容" ./3.批量查找并替換任意文件夾下的文件內容。sed -i "s/要…

Day09-遞歸

#模擬棧結構 stack [] #壓棧(想棧里存數據) stack.append("A") print(stack) stack.append("B") print(stack) stack.append("C") print(stack)#出棧(在棧里取數據) res stack.pop() print("…

java中String相等問題

判斷兩個字符串是否相等的問題。在編程中,通常比較兩個字符串是否相同的表達式是“”,但在java中不能這么寫。在java中,用的是equals(); 例:A字符串和B和字符串比較: if(A.equals(B)){ } 返回true 或false. String 的equals 方法用于比較兩個…

linux proc文件 write的原子性,linux - Linux中writev()系統調用的原子性 - 堆棧內存溢出...

在fs.h找到它:static inline void file_start_write(struct file *file){if (!S_ISREG(file_inode(file)->i_mode))return;__sb_start_write(file_inode(file)->i_sb, SB_FREEZE_WRITE, true);}然后在super.c:/** This is an internal function, p…

關于對發送HTTP請求以及解析服務器返回的數據操作的提取到一個公共類中進行封裝

創建一個名為HttpUtil的類并提供名為sendHttpRequest靜態方法.相關代碼如下: package com.hzy.networktest;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;p…

初始化CSS

不同的瀏覽器默認樣式不一樣,所以容易出現兼容性問題,每次寫網頁時都應該都網頁的css或HTML標簽進行初始化 這樣可以節約代碼,節約網頁下載時間,是網頁內容更加簡潔, 大致需要初始化的地方有 H1-H4標簽,table標簽,文字大小,文字沒有鏈接,超鏈接樣式,DIV,居中,ol,ul,li,img等等的…

Day10-時間

UTC(世界協調時間):格林尼織天文時間 在中國來說是UTC8 DST(夏令時):是一種節約能源而人為規定時間制度,在夏季調快一個小時時間的表示形式: 1、時間戳 以整形或浮點型表示時間的一個以秒為單位的時間間隔 …

WebForm 分頁與組合查詢

1.封裝實體類 2.寫查詢方法 //SubjectData類 public List<Subject> Select(string name){List<Subject> list new List<Subject>();cmd.CommandText "select *from Subject where SubjectName like a ";cmd.Parameters.Clear();cmd.Parameters.A…

linux如何輸出當前時間,如何在linux下輸出當前時間

用localtime可直接分解出年月日時分秒QUOTE:struct tm *ptm;long ts;int y,m,d,h,n,s;ts time(NULL);ptm localtime(&ts);y ptm->tm_year1900; //年m ptm->tm_mon1; //月d ptm->tm_mday; //日h ptm->tm_hour; //時n ptm->tm_min; //分s ptm->tm_…

node.js簡單爬蟲

這里假設你已經安裝好node.js和npm&#xff0c;如果沒有安裝&#xff0c;請參閱其他教程安裝。 配置首先是來配置package.json文件&#xff0c;這里使用express,request和cheerio。package.json如下&#xff1a; {"name": "node-scrape","version&quo…

Day11-遞歸性能測試

import time time.clock() sum 0 for i in range (1000000000):sumi print(time.clock()) 慎用 慎用 慎用

關于在新建的package中用SetContentView()函數時無法找到已創建的R.layout的布局文件的的問題的解決辦法

問題描述如下&#xff1a; 解決途徑&#xff1a;是在導入包的過程中&#xff0c;錯誤的將系統自動將Android.R這個包導入最終導致用setContenView()加載布局時只能顯示系統自帶的布局&#xff0c;無法顯示自己已經創建的布局。只需將相應活動中導入的Android.R包刪除&#xff0…

Struts2入門(二)——配置攔截器

一、前言 之前便了解過&#xff0c;Struts 2的核心控制器是一個Filter過濾器&#xff0c;負責攔截所有的用戶請求&#xff0c;當用戶請求發送過來時&#xff0c;會去檢測struts.xml是否存在這個action&#xff0c;如果存在&#xff0c;服務器便會自動幫我們跳轉到指定的處理類中…

linux固態機械分區嗎,不再疑惑!實測數據后才知道固態硬盤究竟要不要分區

不再疑惑&#xff01;實測數據后才知道固態硬盤究竟要不要分區2019-12-10 20:52:00162點贊594收藏177評論前幾年的固態硬盤價格昂貴&#xff0c;一般用戶會選擇128G或256G的固態作為系統盤&#xff0c;由于單盤空間不大&#xff0c;一般都會配合機械硬盤使用&#xff0c;無需考…