在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

相关文章

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间