How do I add a define with qmake WITH a value:
For example, this does not work (as I expected) in my .pro file:
DEFINES += WINVER 0x0500
nor
DEFINES += "WINVER 0x0500"
How do I define WINVER as 0x0500 before anything starts compiling so it's definition is not affected in any way by compilation or include order?
DEFINES += "WINVER=0x0500"
works for me.
This way, -DWINVER=0x0500
is added to the command line of the compiler, which is the syntax GCC/mingw expects for command line preprocessor definitions (see here for the details).
DEFINES += MY_DEF=\\\"String\\\"
This format is to be used when one intends to have the macro replaced by string element
As an addendum, if you want to execute shell code instead of just setting a constant (e.g. for getting a version number or a date):
Either use $$system()
. This is run when qmake is executed:
DEFINES += GIT_VERSION=$$system(git describe --always)
Or use $()
if the code should be run on every build (i.e. when the makefile is executed).
For DEFINES
you need to escape the command if it contains spaces, otherwise qmake inserts unwanted -D
's:
DEFINES += GIT_VERSION='$(shell git describe --always)'
This will then be copied literally into the makefile.
If the command's output contains spaces, you need another layer of escapement (this time for make):
DEFINES += BUILD_DATE='"$(shell date)"'
If you need quotes around your value to get a string, it gets a bit ugly:
DEFINES += BUILD_DATE='"\\\"$(shell date)\\\""'
I would recommend to use the preprocessors stringify operation in this case:
#define _STR(x) #x
#define STRINGIFY(x) _STR(x)
printf("this was built on " STRINGIFY(BUILD_DATE) "\n");
#define STRING "Value with spaces" fro Qt *.PRO file :
In order to add a #define STRING "Value with spaces" from QT Project file, we had to write :
DEFINES += "VERSION_LOG=\"\\\"Version 2.5.1\\\"\""
DEFINES += "VERSION_QT=\"\\\"Qt 5.10\\\"\""
which gives into the Makefile.Release file :
DEFINES = -DUNICODE -D_UNICODE -DVERSION_LOG="\"Version 2.5.1\"" -DVERSION_QT="\"Qt 5.10\"" -DQT_NO_DEBUG [...]
In summary, on that line : DEFINES += "VERSION_LOG=\"\\\"Version 2.5.1\\\"\""
The first and last "
tells QMake to read the entire sentence as a string
The first and last \"
writes the first and last "
into -DVERSION_LOG="\"Version 2.5.1\""
The first and last \\\"
writes a \
then a "
into -DVERSION_LOG="\"Version 2.5.1\""
Greg's answer works fine in a .pro file. However, when calling qmake from the command line, I had to leave away the spaces, i.e. use sth. like the following, to make a define work :
qmake DEFINES+="WINVER 0x0500"
If you want to define a string literal for use in Objective-C then you need to remember the @ before the escaped quotes
DEFINES += MY_DEF='@\\"string-literal\\"'
来源:https://stackoverflow.com/questions/3348711/add-a-define-to-qmake-with-a-value