使用值为qmake添加定义?

Jak*_*les 50 qt qmake

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

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

DEFINES += WINVER 0x0500
Run Code Online (Sandbox Code Playgroud)

也不

DEFINES += "WINVER 0x0500"
Run Code Online (Sandbox Code Playgroud)

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

Gre*_*g S 68

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

这样,-DWINVER=0x0500就会添加到编译器的命令行中,这是GCC/mingw对命令行预处理程序定义所期望的语法(有关详细信息,请参阅此处).

  • 为了后人的缘故,如果你想在qmake文件中定义一个字符串值,你似乎必须使用一个相当奇怪的斜杠和引号组合:DEFINES + = MY_DEF ='\\"string \\"' (8认同)
  • +1这非常有效,谢谢!它正如你所说的那样在Makefile中添加了`-DWINVER = 0x0500`.PS - 我不需要引号,因为没有空格.;) (2认同)

小智 46

DEFINES += MY_DEF=\\\"String\\\"
Run Code Online (Sandbox Code Playgroud)

当打算用string元素替换宏时,将使用此格式


ili*_*iis 24

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

要么使用$$system().这是在执行qmake时运行的:

DEFINES += GIT_VERSION=$$system(git describe --always)
Run Code Online (Sandbox Code Playgroud)

或者使用$()代码应该在每个构建运行(即执行makefile时).对于DEFINES你需要的,如果它包含空格逃脱命令,否则QMAKE插入无用-D的:

DEFINES += GIT_VERSION='$(shell git describe --always)'
Run Code Online (Sandbox Code Playgroud)

然后将其逐字复制到makefile中.

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

DEFINES += BUILD_DATE='"$(shell date)"'
Run Code Online (Sandbox Code Playgroud)

如果你需要围绕你的值的引号来获得一个字符串,它会有点难看:

DEFINES += BUILD_DATE='"\\\"$(shell date)\\\""'
Run Code Online (Sandbox Code Playgroud)

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

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

printf("this was built on " STRINGIFY(BUILD_DATE) "\n");
Run Code Online (Sandbox Code Playgroud)


小智 10

#定义Qt * .PRO文件的STRING“带空格的值”:

为了从QT Project文件中添加#define STRING“带空格的值”,我们必须编写:

DEFINES += "VERSION_LOG=\"\\\"Version 2.5.1\\\"\""
DEFINES += "VERSION_QT=\"\\\"Qt 5.10\\\"\""
Run Code Online (Sandbox Code Playgroud)

进入Makefile.Release文件:

DEFINES       = -DUNICODE -D_UNICODE -DVERSION_LOG="\"Version 2.5.1\"" -DVERSION_QT="\"Qt 5.10\"" -DQT_NO_DEBUG [...]
Run Code Online (Sandbox Code Playgroud)

总而言之,在那一行: DEFINES += "VERSION_LOG=\"\\\"Version 2.5.1\\\"\""

第一个和最后一个"告诉QMake以字符串形式读取整个句子

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

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