如何使用带有值的 qmake 添加定义:
例如,这在我的 .pro 文件中不起作用(如我所料):
DEFINES += WINVER 0x0500
也不
DEFINES += "WINVER 0x0500"
如何在开始编译之前将 WINVER 定义为 0x0500,以便它的定义不受编译或包含顺序的任何影响?
DEFINES += "WINVER=0x0500"
为我工作。
这样,-DWINVER=0x0500
被添加到编译器的命令行中,这是 GCC/mingw 期望用于命令行预处理器定义的语法(有关详细信息,请参见此处)。
DEFINES += MY_DEF=\\\"String\\\"
当打算将宏替换为字符串元素时,将使用此格式
作为附录,如果你想执行 shell 代码而不是仅仅设置一个常量(例如用于获取版本号或日期):
要么使用$$system()
. 这是在执行 qmake 时运行的:
DEFINES += GIT_VERSION=$$system(git describe --always)
或者$()
,如果代码应该在每个构建上运行(即在执行 makefile 时),则使用。如果命令包含空格,您DEFINES
需要转义该命令,否则 qmake 会插入不需要-D
的 's:
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");
#define STRING“带空格的值”来自 Qt *.PRO 文件:
为了从 QT 项目文件中添加一个#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\""
第一个和最后一个\\\"
写入 a\
然后 a"
到-DVERSION_LOG="\"Version 2.5.1\""
Greg 的答案在 .pro 文件中运行良好。但是,当从命令行调用 qmake 时,我不得不离开空格,即使用 sth。如下所示,进行定义工作:
qmake DEFINES+="WINVER 0x0500"
如果要定义用于 Objective-C 的字符串文字,则需要记住转义引号之前的 @
DEFINES += MY_DEF='@\\"string-literal\\"'