2009-09-08 17 views
38

Estoy usando archivos Xcode y .xcconfig. Estoy intentando agregar algunos valores en las definiciones del preprocesador, pero simplemente no puedo hacer que funcione.¿Cómo agregar valores en variables xcconfig?

He intentado lo siguiente (así como muchas variaciones de este), pero no hubo suerte hasta el momento:

GCC_PREPROCESSOR_DEFINITIONS = '$(GCC_PREPROCESSOR_DEFINITIONS) NEW_VALUE'

El símbolo NEW_VALUE simplemente nunca se añaden a las definiciones de preprocesador.

¿Alguien tuvo éxito agregando nuevos valores a las variables en los archivos xcconfig?

Respuesta

1

Esto funciona para mí en Xcode 2.4.1:

 
GCC_PREPROCESSOR_DEFINITIONS = "$(GCC_PREPROCESSOR_DEFINITIONS) NEW_VALUE" 

Usted tiene que permitir que a veces unos pocos segundos entre la edición de un archivo de configuración y el cambio a aparecer en Construir un objetivo de Información.

+1

No tuve mucha suerte con XCode 3.2 :( –

9

De acuerdo con la Guía del sistema de Xcode Construir:

Cuando una unidad de configuración contiene más de una definición de un entorno particular, la acumulación , Xcode utiliza la última definición de la unidad. Mantenga teniendo en cuenta que los archivos de configuración no tienen acceso a las definiciones de configuración establecidas en los archivos de configuración que incluyen. Es decir, usted no puede modificar la definición hecha en un archivo de configuración incluido; solo puede reemplazarlo.

Por lo tanto, supongo que esto significa que no es posible agregar valores a una variable determinada.

4

Hay another question con una respuesta que pueda ayudar con este problema en particular. Describe una técnica que hace que cada capa componga un subconjunto de definiciones, luego júntelas todas en el nivel de hoja xcconfig.

0

Desea utilizar el marcador de posición $ (heredado) para representar el valor heredado de los niveles inferiores, p. Ej.

GCC_PREPROCESSOR_DEFINITIONS = "$(inherited) NEW_VALUE" 
+8

Parece una respuesta perfecta, pero está mal. '$ (Inherited)' no funciona _within_ xcconfig archivos; en particular, no puede usarlo para extender una definición de un archivo incluido. –

+2

¿cómo se extiende? –

29

Por las razones expuestas en otras respuestas a esta pregunta, no puede heredar valores fácilmente.

Recomiendo definir sus configuraciones en cascada. Vamos a suponer que APP es el prefijo de su proyecto y crea esta simple definición de sólo unos pocos CFLAGS:

platform.xcconfig:

APP_PLATFORM_CFLAGS = -DMAS=1 

project.xcconfig:

#include "platform.xcconfig" 
APP_PROJECT_CFLAGS = -DBETA=1 

meta-one.xcconfig:

#include "project.xcconfig" 
APP_TARGET_CFLAGS = -DSUPER_COOL=1 
#include "merge.xcconfig" 

target-two.xcconfig:

#include "project.xcconfig" 
APP_TARGET_CFLAGS = -DULTRA_COOL=1 
#include "merge.xcconfig" 

merge.xcconfig:

OTHER_CFLAGS = $(inherited) $(APP_PLATFORM_CFLAGS) $(APP_PROJECT_CFLAGS) $(APP_TARGET_CFLAGS) 

A continuación, podrás basan cada uno de sus objetivos crear configuraciones de target-xxx.xcconfig. Un proyecto real utilizará configuraciones más complejas, utilizando un archivo de configuración para el proyecto y otro diferente para el objetivo, pero se entiende la idea.

Además, recuerde que se refiere a $(inherited)mayor nivel en la jerarquía, no anterior. Por ejemplo, hereda del nivel de Proyecto en el nivel de Destino. No estoy seguro de si esto se aplica a Xcode 4 también.

Esta es una simplificación de GTM, vaya allí para obtener más información.

6

Esto funciona:

xcodebuild GCC_PREPROCESSOR_DEFINITIONS='$(value) NEW_VALUE' 
+1

Gracias, simplemente uso 'GCC_PREPROCESSOR_DEFINITIONS = $ (value) NEW_VALUE' aunque (sin comillas). – mkeiser

4

Creo que he tropezado con un enfoque ligeramente mejor al tratar de integrar archivos de los Cocoapods xcconfig en mi propia. Me gusta establecer lo siguiente en mis proyectos

GCC_PREPROCESSOR_DEFINITIONS = CONFIGURATION_$(CONFIGURATION) 

Desafortunadamente esto entra en conflicto con las definiciones que viene con el Pods.xcconfig. Como se indica en otra parte, $ (heredado) no funciona como se esperaba. Lo que funciona es la siguiente

GCC_PREPROCESSOR_DEFINITIONS[config=*] = CONFIGURATION_$(CONFIGURATION) $(inherited) 

ACTUALIZACIÓN:

Si necesita redefinir un valor para una configuración particular, entonces usted estaría tentado a escribir algo como

GCC_PREPROCESSOR_DEFINITIONS[config=*] = CONFIGURATION_$(CONFIGURATION) $(inherited) 
GCC_PREPROCESSOR_DEFINITIONS[config=Debug] = DEBUG=1 CONFIGURATION_$(CONFIGURATION) $(inherited) 

Lamentablemente este won No funciona, PERO poner la segunda declaración en un archivo que solo se carga por la configuración de depuración anulará correctamente la configuración.

+0

La sintaxis' 'GCC_PREPROCESSOR_DEFINITIONS [config = *] = ...' ' funciona en Xcode 5. Lo usé en archivos '' .xcconfig'' específicos del destino para agregar configuraciones de construcción definidas centralmente para todo el proyecto a configuraciones específicas de destino: '' BLA [config = *] = $ (BLA_TARGET_SPECIFIC) $ (BLA_PROJECT_WIDE) ''. – bassim

Cuestiones relacionadas