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");
+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. ;) –
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