在Qt编写的exe或者dll中设置版本号

2024-06-18 02:20
文章标签 设置 exe dll qt 编写 版本号

本文主要是介绍在Qt编写的exe或者dll中设置版本号,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.背景

在别人编写的exe或者动态库中,通过右键–》属性–》详细信息中,通常都有版本信息:
在这里插入图片描述

那我们自己编译出来的Qt程序,如何设置这些版本号呢?

2.解决方案

参考【.pro文件中设置版本等信息】,只要在工程的.pro文件中添加以下信息就可以了:

QMAKE_LFLAGS += -Wl,--kill-at  #  避免有些平台如VB调用库出问题
CONFIG += skip_target_version_ext # 避免在dll文件的名字里面自动加数字VERSION = 1.2.3QMAKE_TARGET_PRODUCT = 产品名称
QMAKE_TARGET_COMPANY = 公司
QMAKE_TARGET_DESCRIPTION = 文件描述
QMAKE_TARGET_COPYRIGHT = 版权

比如说我的工程设置之后,效果是这样的:
在这里插入图片描述

3.在h或者cpp文件中使用该VERSION变量

在.pro文件中设置了版本后,我们可能需要在cpp文件中取得这个版本号。比如说我们在编译一个函数库给别人使用,那么一般都会提供一个函数类似QString version()返回当前库的版本,用来做版本确认。
有没有什么办法,可以从cpp文件中读取到.pro文件中定义的这个VERSION变量?
其实是有的,参考这里:【如何将Qt .Pro文件中的自定义变量内容 或 内置变量的内容 获取 到Qt的.cpp或.h中使用…】,我们可以这样操作:

在.pro文件中追加一个宏定义SDK_VERSION,其值等于VERSION

DEFINES += SDK_VERSION=$$VERSION

然后在cpp中就可以这样读取到了:

---#define SSS(R) #R
#define TTT(R) SSS(R)int main(int argc, char *argv[])
{
---qDebug() << "version:" << TTT(SDK_VERSION);
---
}

为什么这样就可以读取到呢?
仔细观察,假如我们直接用#SDK_VERSION的话,会直接得到字符串"SDK_VERSION"。因此,要等SDK_VERSION先展开之后,再将其转成字符串。也就是要二次展开,所以,就设计了TTT这宏定义。我们来看看展开过程:
源码–》TTT(SDK_VERSION)
第一次展开–》SSS(0.16.73.13)
第二次展开–》#0.16.73.13
这样子就得到字符串了。

4.注意

但是这样操作后,假如你更新.pro中的VERSION值后,编译,一般会发现程序这边得到的TTT(SDK_VERSION)是旧的。这时候最好是先执行clean再编译。感觉这个是QtCreator的bug。
在这里插入图片描述
有时候QtCreator的行为怪怪的,各种出bug,有时候是程序不可以运行、有时候是无法调试、有时候是代码修改了但是没生效、、、。总之遇到这些奇奇怪怪的情况时,都可以试一下这个Clean命令,让其重新编译一次。还不行的话,重启电脑试试(真的,我就是这样做了就好了);


参考:
【.pro文件中设置版本等信息】
【如何将Qt .Pro文件中的自定义变量内容 或 内置变量的内容 获取 到Qt的.cpp或.h中使用…】

这篇关于在Qt编写的exe或者dll中设置版本号的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1071042

相关文章

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Java实现为PDF设置背景色和背景图片

《Java实现为PDF设置背景色和背景图片》在日常的文档处理中,PDF格式因其稳定性和跨平台兼容性而广受欢迎,本文将深入探讨如何利用Spire.PDFforJava库,以简洁高效的方式为你的PDF文档... 目录库介绍与安装步骤Java 给 PDF 设置背景颜色Java 给 PDF 设置背景图片总结在日常的

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Java利用Spire.XLS for Java设置Excel表格边框

《Java利用Spire.XLSforJava设置Excel表格边框》在日常的业务报表和数据处理中,Excel表格的美观性和可读性至关重要,本文将深入探讨如何利用Spire.XLSforJava库... 目录Spire.XLS for Java 简介与安装Maven 依赖配置手动安装 JAR 包核心API介

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详