Add a define to qmake WITH a value?

QtQmake

Qt Problem Overview


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?

Qt Solutions


Solution 1 - Qt

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).

Solution 2 - Qt

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

This format is to be used when one intends to have the macro replaced by string element

Solution 3 - Qt

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");

Solution 4 - Qt

*#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\""

Solution 5 - Qt

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"

Solution 6 - Qt

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\\"'

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJake PetroulesView Question on Stackoverflow
Solution 1 - QtGreg SView Answer on Stackoverflow
Solution 2 - QtshrikantdView Answer on Stackoverflow
Solution 3 - QtiliisView Answer on Stackoverflow
Solution 4 - QtPix'ConfigView Answer on Stackoverflow
Solution 5 - QtFourtyTwoView Answer on Stackoverflow
Solution 6 - QtPeter FordView Answer on Stackoverflow