2012-03-22 5 views
7

Sto provando a lanciare xcodebuild con diverse macro di preelaborazione.riga di comando xcodebuild che ignora GCC_PREPROCESSOR_DEFINITIONS

ho provato:

xcodebuild -scheme myscheme \ 
      -configuration "Archive" \ 
      -sdk "iphoneos5.1" 
      archive \ 
      CONFIGURATION_BUILD_DIR=../build \ 
      GCC_PREPROCESSOR_DEFINITIONS=ADHOC 

ma ho ottenuto un errore di compilazione a causa del fatto che il preprocessore non è stato utilizzato:

non ho potuto vederlo con la bandiera -D della compilazione comando

Ma è visualizzato all'inizio dello script

Build settings from command line: 
     CONFIGURATION_BUILD_DIR = ../build 
     GCC_PREPROCESSOR_DEFINITIONS = ADHOC 
     SDKROOT = iphoneos5.1 

Il codice all'origine dell'errore di compilazione è:

#ifdef ADHOC 
NSUInteger toto = 0; 
#endif 

ma ottengo un errore use of undeclared identifier per toto

ps: se faccio definire preprocessore macro in Xcode, quindi vengono utilizzati questi valori, i miei sono sovrascritto e l'archiviazione è terminata. Ma voglio creare diverse build basate su diverse definizioni di preprocessore (che mi sembra un'idea migliore rispetto alla creazione di nuove configurazioni o schemi di build)

+0

Sembra funzionare per me. Potete fornire un progetto di esempio che dimostri il problema? – Jim

+0

A proposito, non sono d'accordo sul fatto che le definizioni del preprocessore siano l'approccio migliore qui. Sono intrinsecamente più limitati delle alternative. Hai considerato di utilizzare uno schema, una configurazione, ma più target? – Jim

+1

Ho già sperimentato più obiettivi in ​​un progetto e l'ho odiato: troppe caselle di controllo per controllare ogni volta che includi un nuovo codice in un progetto. Ma forse avrebbe senso qui. –

risposta

2

Devo usare il doppio preventivo e rimuovere il valore $. ho avuto,

GCC_PREPROCESSOR_DEFINITIONS='$value ${e}', 

che non ha funzionato, ma

GCC_PREPROCESSOR_DEFINITIONS="${e}" 

opere.

Dove, e è variabile all'interno di un ciclo,

environments=("TEST1" "TEST2" "TEST3" "TEST4" "TEST5" "PROD") 
for e in "${environments[@]}" 
    do 
....... commands 
    done 

se uso

GCC_PREPROCESSOR_DEFINITIONS='$value ${e}' 

allora devo usare come,

GCC_PREPROCESSOR_DEFINITIONS='$value ADHOC=1' 

questo ha lavorato in uno di costruzione script.