Ajouter une définition à qmake avec une valeur?

comment ajouter un define avec qmake avec une valeur:

par exemple, cela ne fonctionne pas (comme je l'espérais) dans mon .pro file:

DEFINES += WINVER 0x0500

ni

DEFINES += "WINVER 0x0500"

Comment puis-je définir WINVER comme 0x0500 avant que quelque chose commence à compiler de sorte que sa définition n'est pas affectée de quelque façon que ce soit par la compilation ou l'ordre d'inclusion?

45
demandé sur Jake Petroules 2010-07-28 03:09:05

5 réponses

DEFINES += "WINVER=0x0500" fonctionne pour moi.

de Cette façon, -DWINVER=0x0500 est ajouté à la ligne de commande du compilateur, qui est la syntaxe GCC / mingw attend pour les définitions de préprocesseur de ligne de commande (voir ici pour les détails).

59
répondu Greg S 2010-07-28 05:33:25
DEFINES += MY_DEF=\\"String\\"

ce format doit être utilisé quand on a l'intention de faire remplacer la macro par l'élément string

38
répondu shrikantd 2013-08-20 19:48:20

comme addendum, si vous voulez exécuter du code shell au lieu de simplement définir une constante (par exemple pour obtenir un numéro de version ou une date):

utiliser $$system(). C'est exécuter lorsque qmake est exécutée:

DEFINES += GIT_VERSION=$$system(git describe --always)

Ou utiliser $() si le code doit être exécuter sur chaque build (i.e. quand le makefile est exécuté). DEFINES vous devez échapper à la commande si elle contient des espaces, sinon qmake insère des éléments non désirés -D 's:

DEFINES += GIT_VERSION='$(shell git describe --always)'

Ce sera ensuite copié littéralement dans le makefile.

si la sortie de la commande contient des espaces, vous avez besoin d'une autre couche d'échappement (cette fois pour make):

DEFINES += BUILD_DATE='"$(shell date)"'

Si vous avez besoin des guillemets autour de votre valeur pour obtenir une chaîne de caractères, il devient un peu moche:

DEFINES += BUILD_DATE='"\\"$(shell date)\\""'

je vous recommande d'utiliser les préprocesseurs stringify opération dans ce cas:

#define _STR(x) #x
#define STR(X)  _STR(x)

printf("this was built on " STR(BUILD_DATE) "\n");
21
répondu iliis 2014-06-03 08:47:42

la réponse de Greg fonctionne très bien en a. pro file. Cependant, lorsque j'appelais qmake depuis la ligne de commande, j'ai dû laisser de côté les espaces, c'est-à-dire utiliser sth. comme suit, pour faire un travail de définition:

qmake DEFINES+="WINVER 0x0500"
4
répondu FourtyTwo 2015-01-23 08:38:53

#définit la chaîne de caractères "Value with spaces" de Qt *.PRO file:

pour ajouter un #define "CHAÎNE de Valeur avec des espaces" à partir de QT fichier de Projet, nous avons dû écrire :

DEFINES += "VERSION_LOG=\"\\"Version 2.5.1\\"\""
DEFINES += "VERSION_QT=\"\\"Qt 5.10\\"\""

qui donne dans le Makefile.Version fichier :

DEFINES       = -DUNICODE -D_UNICODE -DVERSION_LOG="\"Version 2.5.1\"" -DVERSION_QT="\"Qt 5.10\"" -DQT_NO_DEBUG [...]

En résumé, sur cette ligne : DEFINES += "VERSION_LOG=\"\\"Version 2.5.1\\"\""

le premier et Le dernier " dit à QMake de lire la phrase entière comme une chaîne de caractères

le premier et Le dernier \" écrit le premier et le dernier " en -DVERSION_LOG="\"Version 2.5.1\""

le premier et Le dernier \\" écrit un \ puis " en -DVERSION_LOG="\"Version 2.5.1\""

1
répondu Pix'Config 2018-02-14 10:33:18