<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      QT6.7.2源碼編譯 靜態(tài)庫 動態(tài)庫 (MSVC)

      QT6.7.2源碼編譯 靜態(tài)庫 動態(tài)庫 (MSVC)

      也可以參考官方的文檔 https://doc.qt.io/qt-6/build-sources.html

      環(huán)境搭建

      為了操作更有可復制性,這里在虛擬機中采用全新安裝的系統(tǒng)進行配置。

      系統(tǒng)鏡像為en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96_2.iso

      安裝 Visual Studio 2022

      https://visualstudio.microsoft.com/downloads/

      個人用就下個Professional版,公司用就自己掂量一下了。

      下好后找到VisualStudioSetup.exe打開

      打開后把Desktop development with C++勾上就行了

      勾上后默認安裝MSVC編譯器,CMake支持等,反正就是配置正常的C++開發(fā)環(huán)境

      安裝好后其實基本環(huán)境就有了
      在開始菜單找到 Visual Studio 2022 / x64 Native Tools Command Prompt for VS 2022 點擊運行

      這其實是一個bat腳本,用于初始化一些MSVC的編譯環(huán)境,點擊運行后會打開一個cmd窗口,在這個窗口打開的程序會繼承一些環(huán)境變量,這對于使用MSVC進行編譯很重要。比如在VSCode中使用MSVC編譯就需要在這個CMD窗口里啟動VSCode,才能獲得MSVC需要的編譯環(huán)境(實際上就是設置了一些環(huán)境變量)。當然這啟動的是64位的環(huán)境,如果需要編譯32位的,則運行 x86 Native Tools Command Prompt for VS 2022。

      在CMD窗口依次輸入

      > where ninja
      > where cmake
      > where python
      

      可以查看環(huán)境中是否存在ninjacmake,這兩個是編譯QT6所需要的。

      cmake是meta構建工具,有點類似于C++里模板的概念,它本身不構建項目,而是生成構建后端的項目文件,這個后端也叫generator,比如后端是make,則cmake生成makefile,后端是vs,則生成sln項目,之后再使用make或vs去編譯。qt官方要求使用的構建后端是ninja,所以等下cmake會生成ninja的項目文件,通過ninja來調(diào)用msvc編譯器,從而編譯qt源碼。當然這個generator也是可以換了,不一定必須要ninja。

      從圖中可以看到,缺少python環(huán)境。

      去python官方下載安裝包 https://www.python.org/

      有些地區(qū)由于網(wǎng)絡問題,會很慢

      記得把Add python.exe to PATH勾上,然后安裝。

      不勾的話,就會造成找不到python的情況

      安裝好python后,把剛剛的CMD窗口關了,重新從開始菜單打開。

      不重新打開的話,環(huán)境變量不會刷新,依舊找不到python,當然你要有辦法刷新環(huán)境變量也可以

      重新檢查一下 cmake,ninja,python

      > cmake --version
      > ninja --version
      > python --version
      

      可以發(fā)現(xiàn)都顯示出了對應的版本號,再去qt官方對一下版本要求,如果都符合就可以了。

      下載源碼

      條件允許的話可以直接從官方下載,當然鏡像也可以

      https://download.qt.io/

      https://mirrors.nju.edu.cn/qt/

      official_releases/qt/6.7/6.7.2/single/ 找到qt-everywhere-src-6.7.2.zip下載即可

      single的話就是下載所有的源碼,當然也可以下載單獨的一個模塊,也就是從submodules文件夾下找,

      但如果下載單獨的模塊就會有依賴問題,因為單獨的模塊可能依賴其它模塊,所以還要處理依賴,

      我們常用的widget,core其實都是在qtbase模塊里,如果只是使用widget進行開發(fā),單獨編譯這個就夠了,

      這個模塊沒有其它依賴,畢竟base嘛(,但一般我們還需要用到designer,designer是在qttools模塊里,

      這個模塊有一些其它的依賴,單獨是沒辦法編譯的,所以為了省事,我們把全部源碼都下了,到時候可以選擇需要的模塊進行編譯。

      存放源碼

      下載源碼zip壓縮包后,需要找個地方存放,最好是找固定的位置放,以后編譯出來qt庫也放在一起。

      這樣的目的是因為在編譯debug版的時會產(chǎn)生pdb文件,pdb文件中描述了源碼在什么位置,有了這個信息就可以源碼調(diào)試qt的庫,當然如果沒有這個需求,那編譯好后的文件就可以隨便挪動,源碼也可以刪了。如果是編譯不帶調(diào)試符號的release版的話,也是一樣,沒有固定位置的需要。

      我這里就放在到E盤的Library目錄下,同時解壓源碼。

      解壓可能很慢,推薦裝一個7zip來解壓

      E:.
      └───Library
          ├───src
          │   │   qt-everywhere-src-6.7.2.zip
          │   │
          │   └───qt-everywhere-src-6.7.2
          │		├───cmake
          │		├───qtbase
          │		....
          │
          └───tmp
      

      Library文件夾下有兩個目錄,srctmpsrc用于存放源碼,tmp充當編譯的臨時目錄,編譯完成后可以刪除。

      src目錄里放了源碼的zip文件,和一個源碼解壓后的文件夾

      硬盤可用空間最好有60G以上

      編譯源碼

      在源碼解壓后的目錄下有個configure.bat腳本,這個腳本會利用cmake生成ninja的項目文件,有了ninja的項目文件,我們就可以編譯了。

      但這個腳本默認把項目文件生成在當前目錄下,如果直接在源碼目錄執(zhí)行,那么生成的ninja項目文件會和源碼混在一起,當然如果你編譯完后就把源碼刪了那也許可以這樣(沒試過),所以我們需要一個tmp目錄來存放生成的項目文件,編譯完成安裝庫后就可以把這個ninja項目的臨時文件刪了。

      回到x64 Native Tools Command Prompt for VS 2022的CMD窗口,切換目錄到剛剛創(chuàng)建的tmp文件夾

      > cd /d E:\Library\tmp
      

      現(xiàn)在就可以執(zhí)行configure.bat腳本來生成ninja項目文件了,但configure.bat腳本并不在當前目錄下,那怎么辦呢?

      可以使用../來表示上一級路徑,這樣就可以表示出configure.bat腳本的路徑了,

      如果直接輸入configure.bat腳本的全路徑應該也可以

      下面就表示了configure.bat腳本的路徑
      "../src/qt-everywhere-src-6.7.2/configure.bat"

      為什么要用引號括起來?當然這里其實可以不用,但如果路徑中有空格就需要了

      先不急著執(zhí)行這個腳本,先看看幫助信息

      > "../src/qt-everywhere-src-6.7.2/configure.bat" --help
      

      如果直接執(zhí)行configure.bat就是用默認的配置生成構建項目文件,但我們可以加一些參數(shù)來改變生成的構建項目的參數(shù),比如我們想要同時編譯debug和release版,或只想編譯某一個模塊,或只想編譯靜態(tài)庫,或只想用靜態(tài)運行時等。之所以叫configure.bat當然是因為能config?。?/p>

      下面是我們需要用到的幾個參數(shù)

      -static 編譯靜態(tài)庫
      -static-runtime 使用靜態(tài)運行時(MD)
      -debug-and-release 同時編譯release版和debug版
      -release Release模式編譯
      --prefix 編譯后庫的安裝位置
      -submodules 選擇要編譯的模塊

      編譯動態(tài)庫

      下面我們通過組合參數(shù)來編譯動態(tài)庫,也就是把庫編譯成dll,主要用于在開發(fā)階段使用,因為動態(tài)庫鏈接速度快(只需要導入個函數(shù)就行了),所以為了開發(fā)階段快速編譯,一般都是采用動態(tài)庫(當然如果是閉源軟件,那為了不被qt發(fā)函,最好也用動態(tài)庫)

      > "../src/qt-everywhere-src-6.7.2/configure.bat" -debug-and-release --prefix="../MSVC_2022/x64_Shared_MD" -submodules qtbase,qttools
      

      -debug-and-release 同時編譯debug和release版,如果不需要debug版,改成-release即可

      --prefix="../MSVC_2022/x64_Shared_MD" 表示等下編譯完成后安裝的目錄,也就是當前目錄的上一級目錄下的MSVC_2022/x64_Shared_MD文件夾,說是安裝其實就是把庫的頭文件,動態(tài)庫,cmake配置文件復制出來

      -submodules qtbase,qttools 這里表示要編譯兩個模塊,qbase一般都需要,qttools主要是因為designer在里面,如果你不需要designer就可以刪了這個,寫成這樣 -submodules qtbase,當然如果你想編譯全部源碼,那直接把-submodules qtbase,qttools整個刪了就好了,默認是編譯全部的。

      這里選擇編譯了qtbase和qttools模塊,正常widget開發(fā)夠用,如果要安裝別的模塊可以用逗號隔開,要安裝所有就把這個指令刪了(-submodules qtbase,qttools),qbase主要包括widgets,gui,core這些,qttools主要是為了編譯designer
      當然你也可以加一些別的指令,比如skip跳過某些組件的編譯,具體可以看help

      執(zhí)行命令后會開始配置

      其實看命令行也知道,configure.bat的作用就是依據(jù)參數(shù),去設置cmake的編譯參數(shù),也可以自己手動配置cmake的編譯參數(shù)達到一樣的效果,但大可不必,畢竟它都幫你寫好了。

      執(zhí)行完成后就可以看到tmp目錄下有一堆文件了

      如果config成功,最后會提示你如何編譯、如何安裝

      這里的編譯和安裝命令可能會依據(jù)配置情況,會有所不同,所以一定要看提示。

      這里提示使用cmake --build . --parallel進行編譯,那么直接執(zhí)行這個指令就好了,接下來就是耐心等待了,注意硬盤可用空間。

      > cmake --build . --parallel
      

      編譯過程中有一些警告很正常,只要不是error就可以。

      編譯完成后執(zhí)行 ninja install 來安裝庫

      > ninja install
      

      按照提示來執(zhí)行,也有可能不是這個命令

      安裝好后查看Libaray文件夾下多出來了個MSVC_2022文件夾里面有個x64_Shared_MD文件夾

      進入bin目錄,可以發(fā)現(xiàn)pdb符號和后綴為ddebug動態(tài)庫都有了

      至此動態(tài)庫編譯完成

      編譯靜態(tài)庫

      步驟差不多,先把tmp目錄清空

      記得清空tmp目錄

      確認一下,CMD當前目錄是在tmp里,如果不是請cdtmp目錄。

      執(zhí)行以下指令

      > "../src/qt-everywhere-src-6.7.2/configure.bat" -static -static-runtime -release --prefix="../MSVC_2022/x64_Static_Release_MT" -submodules qtbase,qttools
      

      -static 表示編譯靜態(tài)庫

      -static-runtime 表示使用靜態(tài)的VC運行時(就是把VC的運行時編譯進exe,這樣就不會出現(xiàn)在一些電腦上找不到運行時情況了)

      -release Release模式編譯

      如果加了-static-runtime,編譯我們自己項目的時候release要設置MT編譯參數(shù),否則可能會鏈接出錯。debug則要設置MTd編譯參數(shù),當然一般沒人debug都靜態(tài)編譯,因為靜態(tài)編譯比較慢。

      也可以把-static-runtime刪了,這樣就不需要額外設置MD編譯參數(shù)了,但這樣只有qt的庫是靜態(tài)編譯的,當然編譯出來確實是一個exe單文件,但這個exe還是依賴vc的運行時dll的,如果電腦上沒有安裝vc的運行時,也是沒辦法運行的,所以為了一到底,干脆也把vc的運行時靜態(tài)編譯進去exe了。

      執(zhí)行指令后等待Config

      仔細閱讀提示,發(fā)現(xiàn)編譯命令和之前一樣,但安裝命令變了

      仔細看的話還有個警告,說QDoc不會編譯,和clang有關,需要配置clang,這個的話我們這邊不關心,有需要的話可以在官方進一步了解

      直接執(zhí)行編譯命令即可

      > cmake --build . --parallel
      

      編譯好后執(zhí)行安裝

      > cmake --install .
      

      安裝后MSVC_2022下就多出來了一個文件夾x64_Static_Release_MT

      至此靜態(tài)庫的編譯也完成了

      用MSVC2022編譯的庫,不要給MinGW用,也不要給GCC之類的用,而且也不要去換MSVC的版本,如果要換編譯器或換版本,就全部都換掉,然后重新編譯。

      記得把tmp目錄刪了,這東西很大,編譯好,安裝后一般就沒用了

      src源碼目錄,看自己情況,如果你需要qt源碼調(diào)試,就留著,因為符號文件pdb里的路徑是指向這些源碼文件的,如果不需要就刪了。

      posted @ 2024-07-01 20:37  Dir-A  閱讀(4694)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 精品人妻一区二区三区四区在线| 免费人成无码大片在线观看| 偷拍专区一区二区三区| 亚洲国产成熟视频在线多多 | 寿宁县| 久久久精品94久久精品| 亚洲一区二区中文av| 美女把尿囗扒开让男人添| 最新亚洲人成网站在线观看| 亚洲精品成人无限看| 国产亚洲精品AA片在线播放天| 中文字幕人妻熟女人妻a片| 亚洲综合在线一区二区三区| 亚洲精品无码日韩国产不卡av| 亚洲伊人久久精品影院| 在线人成免费视频69国产| 中文字幕熟妇人妻在线视频| 女人喷水高潮时的视频网站| 欧美黑人性暴力猛交在线视频| 在线高清免费不卡全码| 99视频在线精品国自产拍| 四虎国产精品成人免费久久| 亚洲一本二区偷拍精品| 日韩深夜福利视频在线观看| 人人妻人人做人人爽夜欢视频 | 欧美成人午夜在线观看视频| 久久精品女人的天堂av| 亚洲AV成人片不卡无码| 美女午夜福利视频一区二区| 老鸭窝在线视频| 久久人人爽爽人人爽人人片av| 新版天堂资源中文8在线| 国产精品尤物午夜福利| 四川丰满少妇无套内谢| 亚洲国产午夜精品福利| 日韩一区二区三区av在线| 亚洲av无码国产在丝袜线观看| 国产精品久久久久鬼色| 国产妇女馒头高清泬20p多| 国产精品国产三级国快看| 国产成人一区二区三区免费|