2011-09-26 10 views
12

Mi proyecto Xcode iOS actual usa varias bibliotecas estáticas. Los diferentes módulos de código en las bibliotecas estáticas tienen varios niveles de depuración que puedo activar/desactivar con #defines desde ese módulo.Variables de entorno Xcode para subproyectos

Lo que quiero hacer es desactivar todo el depuración en la biblioteca y establecer el nivel de depuración del proyecto principal. Quiero hacer esto para que cualquier proyecto que use lib tenga que activar explícitamente la depuración.

Entonces MainProj usa myLib1 y myLib2, etc. Dentro de myLib1 hay un módulo llamado fooModule. fooModule tiene código de depuración, tales como:

#if FOOMODULE_DEBUG_LEVEL > 0 
//debug code, console logs etc 
#endif 

Quiero ser capaz de definir FOOMODULE_DEBUG_LEVEL en el proyecto principal por lo que la biblioteca lo recoge en el tiempo de construcción y compila adecuadamente.

He tratado:

#define FOOMODULE_DEBUG_LEVEL 1 

en el proyecto principal .pch y He intentado agregar FOOMODULE_DEBUG_LEVEL como una variable de entorno definido por el usuario con un valor de 1. Ninguno de los cuales fueron recogidos por el proyecto sub lib.

¿Hay alguna manera de hacerlo o me estoy acercando a esto de la manera incorrecta?

Respuesta

-1

Quizás agregue una definición usando la configuración de compilación "Macros de preprocesador" para los objetivos o las configuraciones de compilación de depuración/liberación donde desea habilitar la depuración.

En su caso, haga doble clic en la columna de valor y luego haga clic en "+" para agregar una nueva macro. El marco sería "FOOMODULE_DEBUG_LEVEL = 1" que debería dar como resultado -DFOOMODULE_DEBUG_LEVEL=1 al compilador.

+0

Hola Mattias, Al agregar macros de preprocesador no parece afectar la construcción de los subproyectos (es decir, bibliotecas estáticas) que he incluido en el proyecto principal – tomj

+0

Esto no está visible en la biblioteca estática. ¿Puedes decirme cuál podría ser el motivo? – applefreak

+0

¿Está construyendo una biblioteca estática o su enlace con una biblioteca estática ya construida? -D las macros solo se usan en tiempo de compilación. –

0

logra esto sin definiciones múltiples creando archivos xcconfig y luego haciendo referencia a ellos o #include -jándolos en todos sus proyectos. entonces, podría aplicar la sugerencia de Mattias y luego definir las definiciones de preprocesador en xcconfig. luego tiene que modificar un archivo (y una reconstrucción completa si necesita estas definiciones en el archivo pch, que tiene configuraciones separadas).

xcode también le permite asignar xcconfigs por configuración de compilación.

+0

Gracias por la sugerencia, – tomj

+0

Agregué AppDebug.xcconfig a mi proyecto y en la página de información del proyecto configuré mis versiones de depuración y liberación para que estén 'basadas' en AppDebug.xcconfig. Luego, en AppDebug.xcconfig se agregó DEBUG_VARIABLE = 1. # si se definió (DEBUG_VARIABLE) NSLog (@ "esto es una prueba"); # endif no puede imprimir nada. Me falta algo sobre cómo funcionan los archivos xcconfig. – tomj

+0

agréguela como definición del preprocesador: 'GCC_PREPROCESSOR_DEFINITIONS = DEBUG_VARIABLE = 1 $ (heredado)' – justin

-1

Solución

1) Objetivo> Configuración> Construir macros del preprocesador. Establezca la variable de entorno como definición de preprocesador para el objetivo (parece que debe ser un objetivo en lugar de un proyecto), p. DEBUG_VARIABLE = 1

2) Proyecto> Fases de compilación> Agregar fase de compilación. Luego, en Run Script, exporte la variable: export DEBUG_VARIABLE

Todos los subproyectos ahora recogen esta variable de entorno.

Creo que lo ideal sería también utilizar la sugerencia de Justin de tener un archivo .xcconfig con todas las macros de preprocesador definidas en un solo lugar para que sea fácil editarlas. Por mi vida no puedo hacer que esto funcione. Si pongo esto en el archivo .xcconfig: GCC_PREPROCESSOR_DEFINITIONS = DEBUG_VARIABLE = 1 $ (heredado) Luego basar la compilación de depuración y/o versión en esta configuración la variable de entorno DEBUG_VARIABLE nunca se establece.

+0

Actualización: Si creo un nuevo proyecto, agregue un archivo .xcconfig como se describe arriba, la variable de entorno está configurada y #ifdefs funciona en el código esta variable. Si sigo exactamente el mismo procedimiento en el proyecto en el que estoy trabajando, no funciona. Supongo que debe haber algo peculiar en la configuración del proyecto de mi proyecto principal ... ¡ni idea de qué! – tomj

+0

Creo que tenía una configuración en el destino anulando la configuración del proyecto. Eliminé todas las macros del preprocesador en la compilación y ahora parece que el archivo .xcconfig funciona. Los cambios no siempre se recogen en la construcción a menos que haga una limpieza. Debe recordar hacer esto! – tomj

+1

Intenté usar este consejo, sin embargo, no tengo ninguna fase de compilación en el nivel del proyecto. Agregar cualquier secuencia de comandos de ejecución al nivel de destino (donde tengo fases de construcción) no ayudará, ya que no se ejecutan antes de que se construyan los subproyectos. – DrMickeyLauer

0

Editaría el esquema y agregaría un script de shell de precomposición para establecer las variables adecuadas. Cuando agrega un script, puede establecer desde qué destino obtiene las definiciones.

Cuestiones relacionadas