使用值为qmake添加定义?

时间:2010-07-27 23:09:05

标签: qt qmake

如何使用带有值的qmake添加定义:

例如,这在我的.pro文件中不起作用(如我所料):

DEFINES += WINVER 0x0500

,也不

DEFINES += "WINVER 0x0500"

如何在任何开始编译之前将WINVER定义为0x0500,以便它的定义不受编译或包含顺序的任何影响?

6 个答案:

答案 0 :(得分:65)

DEFINES += "WINVER=0x0500"适合我。

这样,-DWINVER=0x0500被添加到编译器的命令行,这是GCC / mingw对命令行预处理器定义所期望的语法(详见here)。

答案 1 :(得分:43)

DEFINES += MY_DEF=\\\"String\\\"

当打算用字符串元素

替换宏时,将使用此格式

答案 2 :(得分:24)

作为附录,如果您想执行shell代码而不是仅设置常量(例如,获取版本号或日期):

使用$$system()。执行qmake时运行

DEFINES += GIT_VERSION=$$system(git describe --always)

如果代码应该在每次构建上运行(或者在执行makefile时),请使用$()。 对于DEFINES,如果命令包含空格,则需要转义命令,否则qmake会插入不需要的-D

DEFINES += GIT_VERSION='$(shell git describe --always)'

然后将字面上复制到makefile中。

如果命令的输出包含空格,则需要另一层擒纵机构(这次是make):

DEFINES += BUILD_DATE='"$(shell date)"'

如果您需要围绕您的值引用以获取字符串,则会有点难看:

DEFINES += BUILD_DATE='"\\\"$(shell date)\\\""'

我建议在这种情况下使用预处理器stringify操作:

#define _STR(x) #x
#define STRINGIFY(x)  _STR(x)

printf("this was built on " STRINGIFY(BUILD_DATE) "\n");

答案 3 :(得分:5)

#define STRING"带空格值"来自Qt * .PRO文件:

为了在QT Project文件中添加 #define STRING"值和空格" ,我们必须写:

DEFINES += "VERSION_LOG=\"\\\"Version 2.5.1\\\"\""
DEFINES += "VERSION_QT=\"\\\"Qt 5.10\\\"\""

将其放入Makefile.Release文件中:

DEFINES       = -DUNICODE -D_UNICODE -DVERSION_LOG="\"Version 2.5.1\"" -DVERSION_QT="\"Qt 5.10\"" -DQT_NO_DEBUG [...]

总之,在该行:DEFINES += "VERSION_LOG=\"\\\"Version 2.5.1\\\"\""

第一个和最后一个"告诉QMake将整个句子读作一个字符串

第一个和最后一个\"将第一个和最后一个"写入-DVERSION_LOG="\"Version 2.5.1\""

第一个和最后一个\\\"\然后"写入-DVERSION_LOG="\"Version 2.5.1\""

答案 4 :(得分:4)

Greg的答案在.pro文件中运行正常。但是,当从命令行调用qmake时,我不得不放弃空格,即使用某事物。如下所示,进行定义工作:

qmake DEFINES+="WINVER 0x0500"

答案 5 :(得分:0)

如果要定义要在Objective-C中使用的字符串文字,则需要在转义引号之前记住@

DEFINES += MY_DEF='@\\"string-literal\\"'