最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Qt 5.15的源碼編譯(Windows)

2023-08-24 16:56 作者:我夢(mèng)見(jiàn)珍妮  | 我要投稿

前言:在技術(shù)革新如此之快的時(shí)代,Qt也在為適應(yīng)這些變化發(fā)生著重大的改變。又一長(zhǎng)期(3年)支持版Qt 5.15 LTS在2020年3月發(fā)布,重大更新的大版本Qt 6.0也在2020年12月發(fā)布。但是,Qt的策略也發(fā)生了變化。從Qt 5.15開(kāi)始,安裝Qt需要Qt賬戶,今后的長(zhǎng)期支持版將對(duì)只針對(duì)商業(yè)用戶,離線安裝包也只針對(duì)商業(yè)用戶開(kāi)放。這意味著,開(kāi)源用戶已經(jīng)沒(méi)法像以前直接下載安裝包安裝Qt,只能通過(guò)在線安裝工具安裝Qt,而且需要通過(guò)升級(jí)安裝將來(lái)發(fā)布的小補(bǔ)丁版本來(lái)使用該長(zhǎng)期支持版。詳見(jiàn).

當(dāng)然,我們還是可以手動(dòng)編譯安裝Qt,這個(gè)辦法只要Qt還是開(kāi)源的就永遠(yuǎn)是可行的。這也是本文主要分享的。本文適用于:Qt5.15 + windows + msys2(mingw64)。


編譯源碼參考資料

首先下載源代碼,如果網(wǎng)速過(guò)慢,可以用tuna鏡像。

解壓源碼到你想要保存的位置,進(jìn)入源代碼根目錄。注意,源碼根目錄所在層級(jí)一定不要太深太長(zhǎng),免得因windows路徑長(zhǎng)度限制導(dǎo)致奇怪問(wèn)題。


經(jīng)驗(yàn):根目錄下的README可以仔細(xì)看看,這是編譯當(dāng)前源碼最直接的資料


Qt官網(wǎng)的一些編譯指導(dǎo)文檔。

Supported Platforms

Qt for windows

Qt for Windows - Requirements

Qt for Windows - Building from Source

Qt Configure Options

Building Qt 5 from Git

MinGW-64-bit


所需依賴-總結(jié)

msys2

如你所見(jiàn),Qt項(xiàng)目依賴了跟多其他開(kāi)源項(xiàng)目,如果單純地使用mingw64編譯,會(huì)因?yàn)槿鄙俸芏嗥渌_(kāi)源庫(kù),而無(wú)法進(jìn)行編譯。msys2是個(gè)很優(yōu)秀的項(xiàng)目。它將linux下的很多工具和庫(kù)移植到了windows上,并提供一套類linux的shell環(huán)境和完善的編譯工具鏈,方便開(kāi)發(fā)者編譯,安裝,運(yùn)行原生windows軟件。通過(guò)使用msys2的Arch Linux包管理工具pacman,可以很方便自由地安裝我們需要的庫(kù)。 下載

openGL ANGLE

Qt Quick 2 需要 OpenGL 2.1(或者更高版本) 或者OpenGL ES 2.0 才能工作。

在Windows上, 有兩種辦法:

使用 ANGLE 來(lái)將OpenGL調(diào)用映射為 DirectX (默認(rèn))

使用Windows系統(tǒng)上顯卡廠商提供的原生OpenGL 驅(qū)動(dòng)

Qt 5中已經(jīng)集成了一份ANGLE。如果要使用方法1,對(duì)于mingw編譯,你需要安裝 DirectX SDK。

如果要使用方法2,你需要確保你的顯卡驅(qū)動(dòng)支持OpenGL 2.1 或者更高版本 (注意:微軟官方的Windows驅(qū)動(dòng)僅支持OpenGL 1.1,這顯然是不夠的),然后在使用configure時(shí)加上參數(shù)’-opengl desktop’。暫時(shí)使用-opengl desktop ,angle待以后有時(shí)間再研究安裝。

ICU

Qt 5 可以通過(guò) ICU 庫(kù)來(lái)得到UNICODE和 Globalization支持。 構(gòu)建Qt Webkit時(shí)將會(huì)用到。

QtWebkit:在Qt5.6以前,都是使用QtWebkit組件,但Qt5.6以后,移除了QtWebkit這個(gè)組件

QtWebEngine:Qt5.6以后的MSVC版本,引進(jìn)了基于Chromium的瀏覽器引擎 QtWebEngine

QAxWidget:Qt5.6以后的mingw版本,由于移除了Qt Webkit,mingw版本不能使用QtWebEngine,因此只能使用QAxWidget控件。

ICU可以通過(guò)msys2快速安裝。

openSSL

Qt使用openSSL以支持SSL網(wǎng)絡(luò)通信。openSSL可以通過(guò)msys2快速安裝。

Python 3 以上(編譯Qml需要)

Perl 5.8 以上 Perl可以通過(guò)msys2快速安裝。

另外,Qt還依賴一些小的第三方庫(kù),已經(jīng)集成在Qt源碼中。包括zlib libjpeg libpng freetype PCRE HarfBuzz-NG等,如果在你的系統(tǒng)檢測(cè)不到時(shí),將自動(dòng)使用。也可以在configure時(shí)指定,通過(guò)加 -qt前綴或-system前綴 指示使用哪個(gè)來(lái)編譯。

如:-qt-zlib指定使用Qt集成的 -system-zlib指定使用本地系統(tǒng)的 但是一開(kāi)始的配置測(cè)試,該怎么讓它檢測(cè)到呢?后面發(fā)現(xiàn)似乎可以通過(guò)configure時(shí)加入-I,-L選項(xiàng)以便讓configure可以找到自己安裝的庫(kù)的頭文件和庫(kù)目錄


編譯Qt源碼

如其他開(kāi)源項(xiàng)目一樣,根目錄下的configure.bat就是Windows下的配置腳本,configure是linux下的配置腳本。

經(jīng)過(guò)仔細(xì)分析這些腳本和項(xiàng)目架構(gòu),我并沒(méi)有走一般的編譯路線,而是分工程編譯。

實(shí)際上,根目錄中的configure.bat就是調(diào)用qtbase工程目錄下的configure.bat,這個(gè)才是真正做事的腳本。它做了哪些事呢:確定平臺(tái)和編譯器,生成qmake的makefile,調(diào)用make生成qmake,然后會(huì)暫停讓用戶確認(rèn)版權(quán),執(zhí)行“配置測(cè)試”,產(chǎn)生用戶環(huán)境的報(bào)告 config.summary , 最后qmake生成后將自動(dòng)調(diào)用腳本所在目錄下的.pro文件,生成工程的makefile。查看config.summary可以確定Qt檢測(cè)到的構(gòu)建環(huán)境。

qmake是重點(diǎn),以后其他所有工程都可交由qmake解析.pro來(lái)產(chǎn)生相應(yīng)工程的makefile,有了makefile,執(zhí)行make即可生成各個(gè)工程的庫(kù)文件。


qbase工程是Qt的核心工程。我首先單獨(dú)編譯了這個(gè)工程。步驟: 創(chuàng)建D:\qt-build\qtbase目錄,在該目錄中執(zhí)行構(gòu)建配置:


D:\qt-src515\qtbase\configure.bat -prefix D:\Qt\Qt5.15.2\mingw1010_64 -debug-and-release -platform win32-g++ -opensource -confirm-license -nomake tests -skip qtwebengine? -qt-zlib -ssl -icu -opengl desktop

1

說(shuō)明:-prefix 指定安裝將會(huì)部署的位置,根據(jù)自己情況修改 ; -debug-and-release 指示編譯生成debug版和release版的Qt庫(kù);-platform win32-g++ 指明編譯平臺(tái)是windows,并使用mingw編譯器; -opensource -confirm-license 是為了自動(dòng)確認(rèn)開(kāi)源證書(shū),免得到時(shí)暫停手動(dòng)確認(rèn);-nomake tests 不需要編譯測(cè)試工程; -skip qtwebengine 暫時(shí)先不編譯webengine模塊,因?yàn)樘罅?;-qt-zlib -ssl -icu 指示檢測(cè)這些庫(kù),并在需要時(shí)使用;-opengl desktop 明確指示使用你windows上安裝的opengl驅(qū)動(dòng)來(lái)編譯程序,但這樣編譯出的程序在別的電腦上運(yùn)行時(shí)需要目標(biāo)電腦上安裝的opengl驅(qū)動(dòng)能兼容你的程序


關(guān)于命令選項(xiàng)的具體細(xì)節(jié),可參考qtbase\config_help.txt。如上所述,配置成功后,就有了qtbase工程的makefile,現(xiàn)在可以執(zhí)行make進(jìn)行編譯了:


mingw32-make -j16? ? #開(kāi)啟十六線程編譯,根據(jù)自己電腦實(shí)際核心數(shù)調(diào)整

1

qmake的具體調(diào)用:qmake調(diào)用qbase.pro,-> load(qt_parts.prf) -> load(qt_configure.prf),

這里2356行函數(shù)在做環(huán)境測(cè)試,2394行qtConfProcessOutput輸出Src和mkspecs下的所有文件。


make成功后將在D:\qt-build\qtbase里生成bin程序,頭文件,庫(kù)文件,接著執(zhí)行安裝部署,將安裝到之前設(shè)置的-prefix目錄。


? ?mingw32-make install

1

將D:\Qt\Qt5.15.2\mingw1010_64\bin加入到環(huán)境變量path中,正如前所述,就可以方便地用qmake去構(gòu)建其他任何工程以生成makefile,執(zhí)行編譯mingw32-make -j16 ,執(zhí)行安裝mingw32-make install


編譯好一個(gè)模塊后記得安裝幫助文檔,而不要立馬就把編譯生成目錄給刪了,不然再單單通過(guò)qmake生成makefile再編譯文檔是沒(méi)法生成幫助文檔的,因?yàn)榫幾g時(shí)拷貝了很多源文件,生成文檔時(shí)會(huì)去解析。


編譯qch格式文檔:mingw32-make docs

安裝文檔:mingw32-make install_docs

官網(wǎng)上的qtdoc-everywhere-src-5.15.2.zip和解壓后的源碼根目錄中的qtdoc目錄內(nèi)容一樣。這個(gè)其實(shí)是用來(lái)生成qt的整體介紹型幫助文檔的,包括完全獨(dú)立的html格式的,以及可以導(dǎo)入到Qt Assistant和Qt Creator中的qch格式的。具體操作及注意事項(xiàng)可見(jiàn)其目錄中的README。編譯這些不僅需要make還需要qdoc工具,qdoc包含在qttools工程中,但是注意,qdoc使用Clang解析C++代碼,因此其依賴libclang。而Clang是LLVM Compiler Infrastructure Project中的一部分。所以需要安裝LLVM6.0以上版本。


qmake -query 查qt安裝目錄配置


錯(cuò)誤記錄

qtmultimedia編譯報(bào)錯(cuò),

E:/msys2_x86_64/mingw64/x86_64-w64-mingw32/include/mfidl.h:3245:19: note: forward declaration of ‘IMFSourceResolver’ {aka ‘struct IMFSourceResolver’}

3245 | typedef interface IMFSourceResolver IMFSourceResolver;


執(zhí)行qmake生成makefile時(shí),使用qmake D:\qt-src515\qtmultimedia -- -no-wmf解決。


如果遇到其他問(wèn)題,可以參考我前面發(fā)的官方文檔。


Qt Creator的編譯

有了前面的編譯經(jīng)驗(yàn)和認(rèn)識(shí),其實(shí)編譯Creator也是相同的。完全可以把它看作是一個(gè)Qt寫的項(xiàng)目而已。同樣可以用qmake編譯,但是Qt Creator的編譯使用qmake的方式始終失敗,最終是用cmake編譯成功的。


–END–


Qt 5.15的源碼編譯(Windows)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
沛县| 庆云县| 盈江县| 嘉鱼县| 县级市| 呼玛县| 安岳县| 新营市| 延津县| 临高县| 石家庄市| 固镇县| 井研县| 梅河口市| 无棣县| 花莲县| 讷河市| 安吉县| 沅陵县| 甘谷县| 青龙| 黄大仙区| 镇原县| 周至县| 灵武市| 吉木萨尔县| 苏州市| 阳新县| 巩义市| 进贤县| 德化县| 嵊泗县| 友谊县| 馆陶县| 金昌市| 仁寿县| 胶南市| 邯郸市| 探索| 丰顺县| 江阴市|