2009-07-07 13 views
5

He usado Clint Harris' tutorial para configurar el uso compartido de código entre proyectos, y todo funciona como esperaba en mi computadora. Pero en la máquina de mi compañero de trabajo, parece que el compilador no encuentra el archivo de encabezado del proyecto de biblioteca estática cuando construye.¿Por qué no se encuentran los encabezados de biblioteca estática?

Mi compañero de trabajo tiene mi proyecto mediante la clonación de un repositorio git. Hemos examinado todos los indicadores de compilación y configuración de XCode n veces, pero el proyecto simplemente se niega a compilar en su máquina.

Esto es lo que le pregunté a mi compañero de trabajo que hacer, sobre todo copiado y pegado desde el tutorial:

  1. Asegúrese de que hay espacio, no en blanco en la ruta completa al directorio de los proyectos.
  2. Dentro del directorio de proyectos, cree otra carpeta llamada "build_output".
  3. en Xcode, en “XCode> Preferencias 'elegir la pestaña' construcción” y ajuste ‘Lugar construir proyectos en’ a ‘ubicación personalizada’ y especifique la ruta al directorio de construcción común que ha creado.
  4. Set “Lugar Intermedio Archivos de creación” a “Con los productos de construcción.”
  5. Seleccione la pestaña “árboles de origen” y crear una nueva variable del árbol de origen haciendo clic en el botón “+” y rellenando las columnas. En "Nombre de configuración" y "Nombre para mostrar", ingrese [el nombre del proyecto compartido que creó la biblioteca estática]. En la ruta, ingresa la ruta completa a la carpeta de marco.

Siguiendo estos pasos, el proyecto que usa la biblioteca estática debe compilar lo mismo en su máquina que en la mía. Pero no es así Básicamente, el error que obtiene es:

error: TheFrameworkHeader.h: No such file or directory 

y luego una serie de otros errores causados ​​por el encabezado que falta.

¿Alguna estrategia para solucionar este problema? ¿O alguien que haya tenido una experiencia similar y que pueda compartir algunos conocimientos adquiridos con tanto esfuerzo? ¿Falta algo en las instrucciones que he resumido? ¿Debo configurar los roles de los encabezados en la fase de compilación Copy Headers al compilar una biblioteca estática?

Respuesta

8

a pesar de algunos consejos útiles, nunca imaginé éste hacia fuera, pero aquí hay un poco de información para cualquier persona en una situación similar. creé la biblioteca y el proyecto depende de la división un original P roject en dos. Al principio, la biblioteca y la aplicación eran solo dos objetivos dentro del mismo proyecto. Más tarde, moví la aplicación a un proyecto separado.Todo parecía funcionar, y empujé ambos proyectos a repositorios remotos de git. Sin embargo, cuando se clonaron en otras computadoras, no se encontraron los encabezados de la biblioteca.

Más tarde, descubro que el mismo error ocurrió cuando cloné los proyectos en la computadora original. Después de mucha lucha, lo limité a un detalle aterrador: ¡el nombre de la carpeta del proyecto dependiente! (Es decir, el proyecto con la aplicación, no la biblioteca). No es el nombre del paquete .xcodeproject, no es el identificador de la aplicación, sino el nombre de la carpeta que contiene. Tan pronto como cambio eso, todo funciona. Si lo cambio de nuevo al nombre original (en cualquier computadora), nuevamente los encabezados no se encuentran.

Si alguien tiene alguna idea al respecto, por favor, envíe una respuesta!

EDITAR: Desde que publiqué esto, ocurrió el mismo problema con otro proyecto, y nuevamente, el simple cambio de nombre de la carpeta que contiene la carpeta .xcodeproject solucionó el problema.

+0

Acabo de pasar lo mismo. 'ChineseZodiac' == malo. 'Zodiac' == bien. WTF? –

+0

Eso hace que tres de nosotros. Tal vez es hora de presentar un error. – Felixyz

+0

+1 para curar mi dolor de cabeza. – hwaxxer

0

Si usted está teniendo problemas para la construcción de una máquina en particular, entonces el problema es probable que un ajuste de la máquina o el usuario. Tal como un environment variable (quizás INCLUDE_PATH o uno de sus parientes - XCode usa GCC). Puede tener un "." en una de estas variables

La mejor manera de solucionar este problema sería añadir la ruta de la carpeta necesaria para el interruptor -I en el script de construcción.

+0

Gracias, pero he utilizado el panel de construcción en el objetivo en Xcode para establecer las "Rutas de búsqueda del encabezado del usuario" correctamente (usando el nombre configurado en la configuración de Source Trees en las preferencias de Xcode), y eso es todo lo que hice para que funcione en mi cuadro dev. (También configuré "Other Linker Flags" en -ObjC.) Ahora probé esto en una tercera computadora, y la única en la que funciona es la caja dev original. – Felixyz

0

A menudo me olvido de comprobar esto: ¿está seguro de que el archivo faltante (es decir, TheFrameWorkHeader.h "está en el repositorio de git? Puede ser que su configuración de compilación sea correcta, pero el archivo de alguna manera no se agregó git correctamente

+0

No, está registrado en el repositorio. – Felixyz

0

Comprueba que la configuración de compilación "Rutas de búsqueda -> Rutas de búsqueda del encabezado del usuario" (para todas las configuraciones) apunta al directorio que contiene el proyecto Xcode compartido (puedes usar la nueva variable del Árbol de fuentes que creaste) .

+0

Muchas gracias, pero ya había comprobado esto y cualquier otra configuración concebible una docena de veces. Todavía no sé lo que estaba mal, pero editaré la pregunta para compartir un poco de información. – Felixyz

+0

Agregó una nueva respuesta en su lugar, por lo que la pregunta no se marcará como no respondida. – Felixyz

2

No creo que sea Git, creo que es xcode. Aquí tengo un problema muy similar, donde xcode/xcodebuild resuelve falsamente una ruta de inclusión (haciéndola simple). Con exactamente el mismo proyecto de biblioteca y archivos xcconfig (checkout limpio de svn repo) pero otra carpeta contenedora, funciona. Por lo tanto, gracias por la solución y no culpe a Git ;-)

+0

No, git ya no es uno de los sospechosos :) Aún no está claro qué causa xcode la confusión. Debe ser algún tipo de metainformación en el archivo del proyecto? – Felixyz

Cuestiones relacionadas