2010-04-25 20 views
20

¿Cómo puedo definir una macro de preprocesador cuando uso xcodebuild?xcodebuild - cómo definir la macro del preprocesador?

Necesito construir mi aplicación usando varias configuraciones diferentes, y me gustaría hacer esto usando un script de shell que ejecute xcodebuild varias veces con diferentes macros de preprocesador.

Respuesta

18

Cmd + I en el proyecto para abrir el cuadro de diálogo Información. Luego, en la pestaña "Crear", busca la configuración "Macros de preprocesador". Agregue las macros allí.

... ¿Dónde se puede encontrar el nombre de la configuración es GCC_PREPROCESSOR_DEFINITIONS, por lo que podría añadir

GCC_PREPROCESSOR_DEFINITIONS="foo=bar" 

a los argumentos xcodebuild.

+4

* cuando se utiliza xcodebuild * –

+1

Creo que lo KennyTM dice que funcionará bien en xcodebuild una vez que esté configurado (usando la GUI). – nall

+2

Estaba viendo las opciones/indicadores de xcodebuild, ni siquiera noté que establecer configuraciones era parte de la sintaxis de uso básico. Gracias. –

29

Pasa GCC_PREPROCESSOR_DEFINITIONS en la línea de comando xcodebuild.

Recuerde que el argumento se volverá a evaluar para la división de palabras y el manejo de comillas, por lo que debe tener cuidado, especialmente cuando los valores de macro no son simples 1 s (por ejemplo, literales NSString).

También es importante expandir GCC_PREPROCESSOR_DEFINITIONS dentro del valor que establece (comillas simples, para que su script no lo expanda pero el shell de la construcción lo expande), de lo contrario perderá la configuración de compilación de su proyecto para esta propiedad.

El siguiente código pone sus define en un buen conjunto bash y luego se expande la matriz en la línea xcodebuild comando de una manera que Shell cosas se muy bien escapó:

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

¿Puede decirme si es obligatorio dar un valor, PRUEBA = 1 o no? ¿Hay algo equivalente a #define TESTING? – karim

+0

Ok, tengo que usar comillas dobles y eliminar el valor de $. Tuve, GCC_PREPROCESSOR_DEFINITIONS = '$ value $ {e}', que no funcionó, pero GCC_PREPROCESSOR_DEFINITIONS = "$ {e}" funciona. – karim

+0

@karim No sé qué $ e es pero me da la sensación de que te has perdido completamente el sentido de esta respuesta. Además, la matriz define es donde pones tus propias definiciones personalizadas. El de arriba es solo un ejemplo. Con toda probabilidad, su matriz se verá completamente diferente. – lhunath

Cuestiones relacionadas