Aggiungi un define a qmake WITH a value?

Come aggiungo un define con qmake WITH con un valore:

Ad esempio, questo non funziona (come mi aspettavo) nel mio file .pro:

DEFINES += WINVER 0x0500 

 DEFINES += "WINVER 0x0500" 

Come definisco WINVER come 0x0500 prima che qualcosa inizi a compilare in modo che la definizione non sia influenzata in alcun modo dalla compilazione o dall’ordine di inclusione?

DEFINES += "WINVER=0x0500" funziona per me.

In questo modo, -DWINVER=0x0500 viene aggiunto alla riga di comando del compilatore, che è la syntax che GCC / mingw si aspetta per le definizioni del preprocessore della riga di comando (vedere qui per i dettagli).

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

Questo formato deve essere utilizzato quando si intende che la macro venga sostituita dall’elemento stringa

Come addendum, se si desidera eseguire il codice shell anziché semplicemente impostare una costante (ad esempio per ottenere un numero di versione o una data):

O usi $$system() . Questo viene eseguito quando qmake viene eseguito:

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

Oppure usa $() se il codice deve essere eseguito su ogni build (cioè quando viene eseguito il makefile). Per DEFINES è necessario sfuggire al comando se contiene spazi, altrimenti qmake inserisce indesiderati -D ‘s:

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

Questo verrà quindi copiato letteralmente nel makefile.

Se l’output del comando contiene spazi, hai bisogno di un altro strato di scappamento (questa volta per make):

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

Se hai bisogno di quotazioni intorno al tuo valore per ottenere una stringa, diventa un po ‘brutto:

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

Consiglierei di utilizzare l’operazione stringify dei preprocessors in questo caso:

 #define _STR(x) #x #define STR(X) _STR(x) printf("this was built on " STR(BUILD_DATE) "\n"); 

La risposta di Greg funziona bene in un file .pro. Tuttavia, quando chiamavo qmake dalla riga di comando, dovevo lasciare gli spazi, cioè usare sth. come il seguente, per definire un lavoro:

 qmake DEFINES+="WINVER 0x0500" 

#define STRING “Valore con spazi” per file Qt * .PRO:

Per aggiungere un #define STRING “Valore con spazi” dal file del progetto QT, abbiamo dovuto scrivere:

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

che dà nel file Makefile.Release:

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

In breve, su quella riga: DEFINES += "VERSION_LOG=\"\\\"Version 2.5.1\\\"\""

Il primo e l’ultimo " dice a QMake di leggere l’intera frase come una stringa

Il primo e l’ultimo \" scrive il primo e l’ultimo " in -DVERSION_LOG="\"Version 2.5.1\""

Il primo e l’ultimo \\\" scrive a \ then a " in -DVERSION_LOG="\"Version 2.5.1\""