如何使用带有值的qmake添加定义:
例如,这在我的.pro文件中不起作用(如我所料):
DEFINES += WINVER 0x0500
,也不
DEFINES += "WINVER 0x0500"
如何在任何开始编译之前将WINVER定义为0x0500,以便它的定义不受编译或包含顺序的任何影响?
答案 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\\"'