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?
5 réponses
DEFINES += MY_DEF=\\"String\\"
ce format doit être utilisé quand on a l'intention de faire remplacer la macro par l'élément string
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");
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"
#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\""