qmake nmake pro qt宏定义字符串与数字之间的转换

由于我的是多工程,所以自己做了脚本来编译,而且是bat调用qmake->nmake来编译。最终就是makefile规则。之前bat样例看这里:


http://labisart.com/blog/index.php/Home/Index/article/search_word/bat/aid/197


那么我给bat传参数时,最终是传到qmake和nmake,对qmake来讲,可以定义一个宏,然后在源代码里面进行访问,这就带来一个问题:如何宏定义字符串和数字。


首先说说规则,

pro里面:DEFINES += xxx

qmake命令行就少个+号:DEFINES = xxx

这个xxx默认是数字来的,比如 DEFINES = MYVALUE=2.0.0,那么cpp就解析为 MYVALUE = 2.0,而且是double。

如果定义 DEFINES = MYVALUE=iloveyou 这样的字符串,那么cpp直接引用会报错,因为不是字符串“iloveyou”。

这就涉及到宏定义如何在字符串和数字之间进行定义、转换,总的来说目前看到2钟方法:


1、使用转义符,把数字版本号转换为字符串版本号

例如我们定义软件版本时经常 VERSION=1.0.1,这个1.0.1直接传就变成1.0了,所以要变成字符串,看转义大法:

在pro中:

QTCREATOR_VERSION = 4.4.1
DEFINES += QTCREATOR_VERSION=\"\\\"$$QTCREATOR_VERSION\\\"\"

在qmake中:

DEFINES = APP_NAME=\\\"QtCreator\\\"

那么cPP中就可以当作QString来使用了。


2、还有种是#号大法

宏定义数字就不说了,直接引用。看下#号如何引用:

#define MATH_VALUE 123
#define STR_VALUE_(x) #x
#define STR_VALUE(x) STR_VALUE_(x)

经过上述变换后,STR_VALUE就变成字符串了,当然,x可以是任意字符串,例如

STR_VALUE(abcd1234)

如果直接调用前面一个宏:

STR_VALUE_(x)

那么他只会把x当成字符串,而不是x的定义为字符串。

这样,我在qmake定义 DEFINES = APPNAME=qtcreator,

在cpp中只要使用

STR_VALUE(APPNAME);

就可以愉快的当作qstring来用了!

本文为3YL原创,转载无需联系,但请注明来自labisart.com。

原创文章不易,如果觉得有帮助,可打赏或点击右侧广告支持:

查看打赏记录

发表评论请遵守党国法律!后台审核后方可显示!
  • 最新评论
  • 总共0条评论
  • Blog v1.1© 2021 labisart.com 版权所有 | 联系:labartwork@163.com