2012-03-22 15 views
7

Próbuję uruchomić xcodebuild z różnymi makrami przetwarzania wstępnego.Linia poleceń xcodebuild ignorująca GCC_PREPROCESSOR_DEFINITIONS

Próbowałem:

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

ale mam błąd kompilacji ze względu na fakt, preprocesor nie był używany:

nie mogłem zobaczyć go z -D flaga kompilacji komenda

Ale to jest wyświetlane na początku skryptu

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

Kod u podstaw błędu kompilacji jest:

#ifdef ADHOC 
NSUInteger toto = 0; 
#endif 

ale pojawia się błąd use of undeclared identifier dla toto

ps: jeśli zrobię określić preprocesor makr w Xcode, a następnie wartości te są wykorzystywane, moje są zastąpione i archiwizowanie jest zakończone. Ale chcę utworzyć kilka kompilacji opartych na różnych definicjach preprocesora (co brzmi lepiej niż tworzenie nowych konfiguracji lub schematów budowania)

+0

Wydaje się, że działa dla mnie. Czy możesz podać przykładowy projekt, który pokazuje problem? – Jim

+0

Nawiasem mówiąc, nie zgadzam się z tym, że definicje preprocesorów są tutaj najlepszym rozwiązaniem. Są z natury bardziej ograniczone niż alternatywy. Czy rozważałeś użycie jednego schematu, jednej konfiguracji, ale wielu celów? – Jim

+1

Doświadczyłem już wielu celów w projekcie i nienawidziłem go: zbyt wiele pól wyboru do sprawdzenia za każdym razem, gdy dodasz nowy kod do projektu. Ale może miałoby to sens tutaj. –

Odpowiedz

2

Muszę użyć podwójnego cudzysłowu i usunąć wartość $. miałem,

GCC_PREPROCESSOR_DEFINITIONS='$value ${e}', 

który nie działa, ale

GCC_PREPROCESSOR_DEFINITIONS="${e}" 

prace.

Gdzie, e jest zmienna wewnątrz pętli,

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

Jeśli używam

GCC_PREPROCESSOR_DEFINITIONS='$value ${e}' 

Wtedy muszę używać podobnych

GCC_PREPROCESSOR_DEFINITIONS='$value ADHOC=1' 

ta pracowała w jednym z budowy scenariusz.

Powiązane problemy