Qt pro工程文件編寫匯總(區分debug和release、32位和64位的方法,編譯輸出目錄等)

前言:
從事qt開發已經好幾年了,但有關pro編寫的一些細節問題一直沒有一個很好的梳理匯總——因為實際工作開發中,往往只需要編譯特定版本的軟件(例如32位release版本),項目創建好后并設置好編譯路徑,并且庫鏈接不出錯,程序能跑起來后,后續只需要進行代碼開發和升級就好了。
然而,隨著開發需求越來越多,首先單個項目用到的庫非常多,并且各種版本,兼容32/64位的庫,往往會把pro文件搞得很亂,而一旦需要從32位更換64位,又想換成debug模式的話,往往編譯出幾百個錯誤,大多都是庫鏈接不上的問題,這個時候問題排查可能就很耗費時間,也很讓人崩潰( LNK2001: 無法解析的外部符號這種編譯報錯,沒有給出真正的原因,總是讓人很暴躁崩潰)
總而言之,進行qt開發的時候,pro文件兼容debug/release,支持32位/64位,這樣會比較方便,而且也是一個好習慣。某些軟件在最終打包安裝的時候,也可以提供給用戶自由選擇安裝的版本。
理論上,pro文件中也可以區分安卓、linux甚至ios的方法,不需要重復注釋代碼段的。以下只是Windows的區分,以后如果有其他開發,再補充吧。

pro代碼:

win32{
contains(QT_ARCH, x86_64){#64#    message("64-bit")#Module1win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../build_64/xxx/xxx/release/ -lxxxelse:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../build_64/xxx/xxx/debug/ -lxxx#Module2LIBS += -L$$PWD/../xxx/xxx/x64/ -lxxxINCLUDEPATH += $$PWD/../xxx/xxx/}else{#32#    message("32-bit")#Module1win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../build/xxx/xxx/release/ -lxxxelse:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../build/xxx/xxx/debug/ -lxxx#Module2LIBS += -L$$PWD/../xxx/xxx/x86/ -lxxxINCLUDEPATH += $$PWD/../xxx/xxx/
}
}

1.win32{ },就是Windows平臺嘛,如果是linux就是unix{ },只要將代碼包起來,在對應平臺編譯就不會跑其他的代碼

2.contains(QT_ARCH, x86_64){
}else{ }
這是32/64位的區別,x86_64是64位,else就是32位了

3.win32:CONFIG(release, debug|release): …
else:win32:CONFIG(debug, debug|release):…
這個就是debug和release的區分,可以將對應lib的鏈接寫在這里,一般來說路徑都不會不一樣

4.生成路徑

win32:CONFIG(release, debug|release): DESTDIR = ../bin_moduleProjectMain/Release
else:win32:CONFIG(debug, debug|release): DESTDIR = ../bin_moduleProjectMain/Debug

這樣設置,能在debug和release的不同模式下,將執行文件exe分別輸出到不同的目錄下,不會混淆。值得一提的是,如果沒有設置DESTDIR ,默認執行文件時被放到build目錄下的,雖然也有debug/release的區分,但會有一大堆moc,obj這些多余的生成文件,對程序運行沒有用處,所以要將bin和build目錄區分開來。
至于編譯路徑build,直接在qt-項目-構建目錄,設置就好了,上述DESTDIR 的“…/xxx”也是基于這個目錄進行返回上一級的
在這里插入圖片描述
個人比較推薦,在我們的工程目錄底下,分為三個文件夾,分別是工程代碼、build編譯中間文件、bin輸出文件,除此之外還可以加readme說明,還有參考文檔,第三方庫等文件夾

5.執行文件打包
如果按照我以上的步驟編譯,最終bin中一般只有三個文件,其中exe是最主要的,也是最終的執行文件。那么,如果在qt中直接運行,當然可以把程序跑起來,可在bin目錄中直接點擊exe,就會缺少庫了。
首先,我們需要補充qt的庫,那么qt有一個良好的打包功能,一般來說,點擊開始菜單-Qt 5.14.2-Qt 5.14.2 (MSVC 2017 32-bit),我們需要用這個工具進行打包。(如果是64位的話要選擇對應的那個,不然最終exe是跑不起來的!!!)
然后,cd移動到exe所在的文件夾,然后輸入windeployqt xxx.exe,工具就會幫你自動補全qt相關的所有庫了。(注意,有極個別的庫可能會缺漏,比如opengl啊那些,也不知道是不是我個人的問題。如果缺少,大家可以在qt安裝目錄下把dll找出來,復制進去即可)
除此之外,當然是需要將我們的第三方庫復制進去了,這個具體情況按照自己的來。
不過即便如此,你的程序也有可能在其他電腦中跑不起來哦,可能缺少一些vc庫什么的。這里我建議安裝包內內嵌一個vc庫打包合集什么的,用戶安裝的時候可以補全一下。又或者你自己復制補全進自己的文件夾里面,但是保不準出現在其他電腦上跑不起來的情況。
另外還可以加入內嵌的軟件啊,巴拉巴拉什么的,這里就不說了。

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

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

相關文章

ML307R OpenCPU GPIO使用

一、GPIO使用流程圖 二、函數介紹 三、GPIO 點亮LED 四、代碼下載地址 一、GPIO使用流程圖 這個圖是官網找到的,ML307R GPIO引腳電平默認為1.8V,需注意和外部電路的電平匹配,具體可參考《ML307R_硬件設計手冊_OpenCPU版本適用.pdf》中的描…

零基礎PHP入門(一)選擇IDE和配置環境

配置環境 官網下載安裝包,windows https://windows.php.net/download#php-8.3 我是下載的最新版,也可以切換其他版本 https://windows.php.net/downloads/releases/archives/ 下載好壓縮文件后,雙擊解壓到一個目錄 D:\soft\php 復制ph…

成都愛爾眼科醫院《中、歐國際近視手術大數據白皮書2.0》解讀會圓滿舉行

2024年5月12日,愛爾眼科聯合中國健康促進基金會健康傳播與促進專項基金、新華社新媒體中心與中南大學愛爾眼科研究院、愛爾數字眼科研究所重磅發布《中、歐國際近視手術大數據白皮書2.0》。這是繼2021、2022年在國內相繼發布《國人近視手術白皮書》、《2022中、歐近…

Ubuntu系統初始化相關配置

目錄 Ubuntu文件傳輸: ubuntu怎么打開word:安裝wps(應用中心搜索) Ubuntu安裝annoconda

模型蒸餾筆記

文章目錄 一、什么是模型蒸餾二、如何蒸餾三、實踐四、參考文獻 一、什么是模型蒸餾 Hinton在NIPS2014提出了知識蒸餾(Knowledge Distillation)的概念,旨在把一個大模型或者多個模型ensemble學到的知識遷移到另一個輕量級單模型上&#xff0…

【SpringBoot】SpringBoot中防止接口重復提交(單機環境和分布式環境)

📝個人主頁:哈__ 期待您的關注 目錄 🌼前言 🔒單機環境下防止接口重復提交 📕導入依賴 📂項目結構 🚀創建自定義注解 ?創建AOP切面 🚗創建Conotroller 💻分布…

構建高效的在線培訓機構CRM應用架構實踐

在當今數字化時代,在線培訓已成為教育行業的重要趨勢之一。為了提供更好的學習體驗和管理服務,在線培訓機構需要構建高效的CRM(Customer Relationship Management)應用架構。本文將探討在線培訓機構CRM應用架構的設計與實踐。 一、…

PTA 6-3 入侵者圍剿第二關3情報解密

經過上一步已經將2個分隊得到的秘密情報合并到一起,并進行了信息去重。接下來,經過情報的分析,發現情報進行加密的方式,將鏈表從正中間斷開,然后后面的鏈表全部接到前面,輸出來的次序就是敵方的武器發射次序…

綠色智能:AI機器學習在環境保護中的深度應用與實踐案例

🧑 博主簡介:阿里巴巴嵌入式技術專家,深耕嵌入式人工智能領域,具備多年的嵌入式硬件產品研發管理經驗。 📒 博客介紹:分享嵌入式開發領域的相關知識、經驗、思考和感悟,歡迎關注。提供嵌入式方向…

在vps的centos系統中用Python和青龍檢測網頁更新

環境:vps,centos7,python3.8.10,青龍面板(用寶塔安裝) 任務:用python代碼,監控一個網站頁面是否有更新(新帖子),若有,則提醒&#xf…

【數據結構】二叉樹的認識與實現

目錄 二叉樹的概念: 二叉樹的應用與實現: 二叉樹實現接口: 通過前序遍歷的數組"ABD##E#H##CF##G##"構建二叉樹 二叉樹節點個數?編輯 二叉樹葉子節點個數 二叉樹第k層節點個數 二叉樹查找值為x的節點?編輯 二叉樹前序遍…

XSS+CSRF攻擊

一、前言 在DVWA靶場的XSS攻擊下結合CSRF攻擊完成修改密碼 也就是在具有XSS漏洞的情況下實施CSRF攻擊 二、實驗 環境配置與上一篇博客一致,有興趣可以參考CSRF跨站請求偽造實戰-CSDN博客 首先登錄DVWA,打開XSS模塊 name隨便輸入,message…

嵌入式0基礎開始學習 Ⅲ Linux基礎(1)Linux基本命令

1.APT unbuntu中功能最強大的命令行軟件包管理工具, 用來獲取,安裝,編譯,卸載,查詢軟件包。 工作原理; /etc/apt/sources.list -> 文件 用來指針ubuntu的軟件源服務器…

HQL面試題練習 —— 合并數據

題目來源:京東 目錄 1 題目2 建表語句3 題解 1 題目 已知有數據 A 如下,請分別根據 A 生成 B 和 C。 數據A ------------ | id | name | ------------ | 1 | aa | | 2 | aa | | 3 | aa | | 4 | d | | 5 | c | | 6 | aa…

Android 使用 ActivityResultLauncher 申請權限

前面介紹了 Android 運行時權限。 其中,申請權限的步驟有些繁瑣,需要用到:ActivityCompat.requestPermissions 函數和 onRequestPermissionsResult 回調函數,今天就借助 ActivityResultLauncher 來簡化書寫。 步驟1:創…

基于FPGA的VGA協議實現

文章目錄 一、VGA介紹1.1 VGA原理1.2VGA電路 二、配置三、實現3.1 字符顯示3.2圖片顯示 四、代碼4.1.vga驅動模塊4.2數據模塊4.3按鍵消抖模塊4.4頂層模塊4.5TCL引腳綁定 參考 一、VGA介紹 1.1 VGA原理 VGA接口 最主要的幾根線: VGA其實就是相當于一塊芯片&#…

gcc g++不同版本切換命令

sudo update-alternatives --config g sudo update-alternatives --config gcc ubuntu20.04 切換 gcc/g 版本_ubuntu降低g版本-CSDN博客

YOLOv10嘗鮮測試五分鐘極簡配置

最近清華大學團隊又推出YOLOv10,真是好家伙了。 安裝: pip install supervision githttps://github.com/THU-MIG/yolov10.git下載權重:https://github.com/THU-MIG/yolov10/releases/download/v1.0/yolov10n.pt 預測: from ult…

Superset,基于瀏覽器的開源BI工具

BI工具是數據分析的得力武器,目前市場上有很多BI軟件,眾所周知的有Tableau、PowerBI、Qlikview、帆軟等,其中大部分是收費軟件或者部分功能收費。這些工具一通百通,用好一個就夠了,重要的是分析思維。 我一直用的Tabl…

【HMGD】STM32/GD32 CAN通信

各種通信協議速度分析 協議最高速度(btis/s)I2C400KCAN1MCAN-FD5M48510MSPI36M CAN協議圖和通信幀 CubeMX CAN配置說明 CAN通信波特率 APB1頻率 / 分頻系數 /(BS1 BS2 同步通信段)* 1000 ? 42 / 1 / (111) * 1000 ? 14,000 KHz ? 1400000…