2010-04-25 23 views
20

Come è possibile definire una macro del preprocessore quando si utilizza xcodebuild?xcodebuild - come definire la macro del preprocessore?

Ho bisogno di costruire la mia app utilizzando un mucchio di diverse configurazioni, e mi piacerebbe farlo usando uno script di shell che esegue xcodebuild un numero di volte con diverse macro di preprocessore.

risposta

18

Cmd + I sul progetto per aprire la finestra di dialogo Informazioni. Quindi nella scheda "Crea", trova l'impostazione "Macro preprocessore". Aggiungi i macro lì.

... Dove si può trovare il nome impostazione è GCC_PREPROCESSOR_DEFINITIONS, così si potrebbe aggiungere

GCC_PREPROCESSOR_DEFINITIONS="foo=bar" 

agli argomenti xcodebuild.

+4

* quando si utilizza xcodebuild * –

+1

Credo che ciò che KennyTM dice che funzionerà bene in xcodebuild una volta che è stato configurato (usando la GUI). – nall

+2

Stavo guardando le opzioni/flag di xcodebuild, non ho nemmeno notato che le impostazioni delle impostazioni facevano parte della sintassi di utilizzo di base. Grazie. –

29

Si passa GCC_PREPROCESSOR_DEFINITIONS sulla riga di comando xcodebuild.

Ricordate che l'argomento sarà rivalutato per la suddivisione delle parole di conchiglia, e la manipolazione citazione, quindi è necessario fare attenzione, soprattutto quando i valori di macro non sono solo semplici 1 s (letterali ad es. NSString).

Inoltre, è importante espandere il valore GCC_PREPROCESSOR_DEFINITIONS all'interno del valore impostato (quotato a una virgola, in modo che lo script non lo espanda ma la shell della build lo espande), altrimenti si perderanno le impostazioni di generazione del progetto per questa proprietà.

Il codice seguente mette il vostro definisce in una bella serie bash e poi si espande la matrice nella linea xcodebuild di comando in modo che la Shell roba ottiene ben sfuggito:

defines=(TESTING=1 '[email protected]"http://192.168.0.101:8080"') 

xcodebuild -verbose -scheme "MyAppScheme" \ 
    GCC_PREPROCESSOR_DEFINITIONS='$GCC_PREPROCESSOR_DEFINITIONS '"$(printf '%q ' "${defines[@]}")" 
+2

Puoi dirmi, è obbligatorio fornire un valore, TESTING = 1 o no? C'è qualcosa di equivalente a #define TESTING? – karim

+0

Ok, devo usare il doppio preventivo e rimuovere il valore $. Ho avuto, GCC_PREPROCESSOR_DEFINITIONS = '$ valore $ {e}', che non ha funzionato, ma GCC_PREPROCESSOR_DEFINITIONS = "$ {e}" funziona. – karim

+0

@karim Non so cosa sia $ e, ma ho la sensazione che abbiate completamente perso il punto di questa risposta. Inoltre, la matrice definisce è dove si definisce la propria personalizzazione. Quello sopra è solo un esempio. Con ogni probabilità il tuo array apparirà completamente diverso. – lhunath

Problemi correlati