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.mzph.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中、欧近…

模型蒸馏笔记

文章目录 一、什么是模型蒸馏二、如何蒸馏三、实践四、参考文献 一、什么是模型蒸馏 Hinton在NIPS2014提出了知识蒸馏(Knowledge Distillation)的概念,旨在把一个大模型或者多个模型ensemble学到的知识迁移到另一个轻量级单模型上&#xff0…

【SpringBoot】SpringBoot中防止接口重复提交(单机环境和分布式环境)

📝个人主页:哈__ 期待您的关注 目录 🌼前言 🔒单机环境下防止接口重复提交 📕导入依赖 📂项目结构 🚀创建自定义注解 ✈创建AOP切面 🚗创建Conotroller 💻分布…

构建高效的在线培训机构CRM应用架构实践

在当今数字化时代,在线培训已成为教育行业的重要趋势之一。为了提供更好的学习体验和管理服务,在线培训机构需要构建高效的CRM(Customer Relationship Management)应用架构。本文将探讨在线培训机构CRM应用架构的设计与实践。 一、…

绿色智能: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…

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…

吉林大学计科21级《软件工程》期末考试真题

文章目录 21级期末考试题一、单选题(2分一个,十个题,一共20分)二、问答题(5分一个,六个题,一共30分)三、分析题(一个10分,一共2个,共20分&#xf…

【C语言】10.C语言指针(1)

文章目录 1.内存和地址1.1 内存1.2 究竟该如何理解编址 2.指针变量和地址2.1 取地址操作符(&)2.2 指针变量和解引⽤操作符(*)2.2.1 指针变量2.2.2 如何拆解指针类型2.2.3 解引⽤操作符 2.3 指针变量的⼤⼩ 3.指针变量类型的意…

汇编:字符串的输出

在16位汇编程序中,可以使用DOS中断21h的功能号09h来打印字符串;下面是一个简单的示例程序,演示了如何在16位汇编程序中打印字符串: assume cs:code,ds:data ​ data segmentszBuffer db 0dh,0ah,HelloWorld$ //定义字符串 data …