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

1.背景

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

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

2.解决方案

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

QMAKE_LFLAGS += -Wl,--kill-at  #  避免有些平台如VB调用库出问题
CONFIG += skip_target_version_ext # 避免在dll文件的名字里面自动加数字

VERSION = 1.2.3

QMAKE_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中使用…】

相关推荐

  1. qtpro文件设置utf-8编码

    2024-06-18 11:30:01       51 阅读
  2. Vim 配置文件设置自动显示行

    2024-06-18 11:30:01       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 11:30:01       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 11:30:01       97 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 11:30:01       78 阅读
  4. Python语言-面向对象

    2024-06-18 11:30:01       88 阅读

热门阅读

  1. ncnn 和 rknn 自定义算子对比实现

    2024-06-18 11:30:01       35 阅读
  2. 如何安全的进行数据获取!!

    2024-06-18 11:30:01       33 阅读
  3. Scala入门介绍

    2024-06-18 11:30:01       33 阅读
  4. vue 弹出消息框

    2024-06-18 11:30:01       30 阅读
  5. Hadoop Namenode节点迁移

    2024-06-18 11:30:01       23 阅读
  6. 面向对象编程基本概念

    2024-06-18 11:30:01       31 阅读
  7. 543. 二叉树的直径

    2024-06-18 11:30:01       30 阅读
  8. leetcode56 合并区间

    2024-06-18 11:30:01       29 阅读
  9. Android Intent的几种用法全面总结

    2024-06-18 11:30:01       34 阅读
  10. css3多列布局

    2024-06-18 11:30:01       47 阅读
  11. 在 Python 3 中删除字符串文字前面的“b“字符

    2024-06-18 11:30:01       33 阅读