2012-03-22 16 views
7

Estoy tratando de ejecutar xcodebuild con diferentes macros de preprocesamiento.línea de comando de xcodebuild ignorando GCC_PREPROCESSOR_DEFINITIONS

He intentado:

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

pero tengo un error de compilación debido al hecho de que no se utilizó el preprocesador:

no pude verlo con la bandera D de la compilación comando

Pero aparece al principio de la secuencia de comandos

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

El código en el origen del error de compilación es:

#ifdef ADHOC 
NSUInteger toto = 0; 
#endif 

pero me da un error de use of undeclared identifier para toto

ps: si lo hago definir preprocesador macros en Xcode, a continuación, se utilizan estos valores, las minas son anulado, y el archivo está hecho. Pero sí quiero hacer varias compilaciones basadas en diferentes definiciones de preprocesador (lo cual me parece una mejor idea que crear nuevas configuraciones de compilación o esquemas)

+0

Parece estar funcionando para mí. ¿Puede proporcionar un proyecto de muestra que demuestre el problema? – Jim

+0

Por cierto, no estoy de acuerdo con que las definiciones de preprocesador sean el mejor enfoque aquí. Son intrínsecamente más limitados que las alternativas. ¿Has considerado usar un esquema, una configuración, pero objetivos múltiples? – Jim

+1

ya he experimentado objetivos múltiples en un proyecto y lo he odiado: demasiadas casillas de verificación para verificar cada vez que incluya código nuevo en un proyecto. Pero tal vez tendría sentido aquí. –

Respuesta

2

Tengo que usar comillas dobles y eliminar el valor $. que tenía,

GCC_PREPROCESSOR_DEFINITIONS='$value ${e}', 

que no funcionaba, pero

GCC_PREPROCESSOR_DEFINITIONS="${e}" 

obras.

Cuando, e es variable dentro de un bucle,

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

si uso

GCC_PREPROCESSOR_DEFINITIONS='$value ${e}' 

entonces tengo que usar como,

GCC_PREPROCESSOR_DEFINITIONS='$value ADHOC=1' 

Esto funcionó en una de acumulación guión.

Cuestiones relacionadas