2010-07-27 11 views
42

Comment puis-je ajouter un DETERMINANT qmake d'une valeur:Ajouter une définition à qmake avec une valeur?

Par exemple, cela ne fonctionne pas (comme je m'y attendais) dans mon fichier .pro:

DEFINES += WINVER 0x0500 

ni

DEFINES += "WINVER 0x0500" 

Comment puis-je définir WINVER comme 0x0500 avant que quelque chose ne commence à être compilé de sorte que sa définition ne soit pas affectée par la compilation ou l'ordre d'inclusion?

Répondre

55

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

De cette manière, -DWINVER=0x0500 est ajouté à la ligne de commande du compilateur, ce qui correspond à la syntaxe attendue par GCC/mingw pour les définitions de préprocesseur de ligne de commande (voir here pour les détails).

+2

+1 Cela fonctionne parfaitement, merci! Il a ajouté '-DWINVER = 0x0500' au Makefile comme vous l'avez dit. PS - Je n'ai pas besoin de guillemets car il n'y a pas d'espaces. ;) –

+6

Pour l'avenir, si vous voulez définir une valeur de chaîne dans le fichier qmake, il semble que vous devez utiliser une combinaison plutôt étrange de barres obliques et de guillemets: DEFINES + = MY_DEF = '\\ "chaîne \\"' – JCooper

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

Ce format doit être utilisé quand on a l'intention d'avoir la macro remplacé par un élément de chaîne

21

Comme un additif, si vous voulez exécuter du code shell au lieu de mettre juste un (par exemple constante pour obtenir un numéro de version ou une date):

Utilisez soit $$system(). C'est terme lorsque qmake est exécuté:

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

Ou utilisez $() si le code doit être course sur tous les construire (à savoir lorsque le makefile est exécuté). Pour DEFINES dont vous avez besoin pour échapper à la commande si elle contient des espaces, sinon qmake insère l » -D indésirables:

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

Ce seront alors copiés 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 faire):

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

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

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

Je recommande d'utiliser le fonctionnement des préprocesseurs dans ce cas:

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

printf("this was built on " STR(BUILD_DATE) "\n"); 
+0

+1 pour l'exemple GIT_VERSION et des notes sur les guillemets qui s'échappent. OT mais j'ai trouvé le système 'GIT_VERSION = \\\" $$ le plus utile suivant (git décrire --alors --abbrev = 0) \\\ "' pour obtenir la dernière version de la balise, ou à défaut le commit actuel –

4

La réponse de Greg fonctionne très bien dans un fichier .pro. Cependant, lorsque j'appelais qmake depuis la ligne de commande, je devais quitter les espaces, c'est-à-dire utiliser sth. comme ce qui suit, pour faire un travail de définir:

qmake DEFINES+="WINVER 0x0500" 
1

#define STRING "Value avec des espaces" fro Qt *.PRO fichier:

Pour ajouter un #define STRING "Value" avec des espaces à partir du fichier du projet QT, nous avons dû écrire:

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

qui donne dans le fichier Makefile.Release:

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 en tant que chaîne

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

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

+0

Merci beaucoup! Cela m'a vraiment aidé! –