2011-12-10 10 views
6

Estoy tratando de integrar una herramienta en Xcode 4 que genera un encabezado C a partir de un archivo de descriptor. En Xcode 3, funcionó para agregar un paso de compilación personalizado para archivos con una extensión específica. Esos archivos luego se compilan antes de los archivos .m/.mm/.cpp que los incluyeron. Cuando trato de hacer esto con Xcode 4, parece que ejecuta mi paso personalizado después de compilar la otra fuente. Esto no funciona, por supuesto. ¿Hay alguna forma de decirle a Xcode que ejecute el paso anterior?Xcode 4 paso de compilación personalizado antes de compilar

He aquí una sencilla configuración repro:

enter image description here

Mi main.m contiene una:

#include <mytest.h> 

y he añadido ${DERIVED_FILE_DIR} a la ruta de búsqueda de cabecera. Cuando compilo este proyecto me sale el siguiente:

enter image description here

Si quito el incluir y construir de nuevo me sale esto:

enter image description here

Así que la regla es, en efecto trabajando, pero es ejecutado demasiado tarde. ¿Hay alguna forma de cambiar este comportamiento?

+0

Esto puede ser un poco tarde, pero ¿funcionaría si creara un objetivo de construcción separado que acabara de crear los encabezados y luego agregara ese objetivo como una dependencia de su objetivo principal? – Isaac

Respuesta

3

En lugar de agregar una regla de compilación: en la pestaña Crear fases, utilizando el botón Agregar fase de compilación, seleccione Agregar secuencia de comandos de ejecución. Se agregará una fase de ejecución del script en la que puede implementar los requisitos del script. La nueva fase del guión de ejecución se puede arrastrar antes de la fase de compilación de orígenes, que es cuando desea que se ejecute su funcionalidad.

+0

Eso significa que tendré que agregar todos los archivos manualmente (habrá más de uno) como entrada/salida a esa fase de compilación. Supongo que debería funcionar, pero sería mucho mejor hacerlo funcionar simplemente agregando el archivo de entrada al proyecto y haciendo coincidir la extensión. – user408952

+0

Elabore su secuencia de comandos para usar expansiones de caparazón y comodines. Esto lo hará dinámico y de bajo mantenimiento. Sin embargo, adentrarse demasiado en las secuencias de comandos shell está fuera de tema con respecto a esta pregunta. –

+0

Prefiero no hacer eso ya que probablemente confundirá la comprobación de dependencia. – user408952

0

Necesita agregar una dependencia explícita entre el archivo generado y su destino.

Abra el directorio DerivedData en Finder, seleccione el archivo mytest.h y arrástrelo en XCode dentro de su proyecto. Normalmente creo un nuevo grupo llamado "Archivos Derivados" y coloco esos archivos debajo de él.

Para encontrar fácilmente el directorio DerivedData, cambio la configuración del proyecto, por lo que hace que el proyecto del directorio sea relativo (ver Archivo -> Configuración del proyecto, pestaña Construir).

Después de que se hace referencia al archivo en el proyecto, debe agregarlo a la regla principal Recopilar orígenes de destino. Seleccione el objetivo principal del proyecto, expanda Fuentes de compilación si aún no está expandido y arrastre el archivo derivado recién agregado a la lista de archivos para compilar.

Por último, ya que realmente desea compilar este archivo, es posible que desee cambiarle el nombre a .m o .c, en lugar de .h.

Actualización: En realidad parece que lo anterior no funciona todo el tiempo. La forma más confiable es usar una fase de compilación en lugar de una regla de compilación.

6

Ya tengo mi placa renacimiento, pero aquí va :)

Me acabo de encontrar con este problema, y ​​la respuesta es sencilla (ahora he pasado la mitad de un día mirando a ella).

La regla de compilación responde al archivo de origen (.abc) y el archivo de origen se procesa en el orden en que aparece en la lista en el paso de compilación "Compilar fuentes". Simplemente vaya a la regla de compilación y arrastre el .abc a la parte superior de la lista.

Un pequeño paso hacia mi placa de arqueólogo, espero.

Cuestiones relacionadas