Mi proyecto de Xcode se basa en variaciones del mismo producto utilizando dos objetivos. La diferencia entre los dos es solo en qué versión de una biblioteca incluida se utiliza. Para los archivos de origen .c, es fácil asignar la versión correcta al destino correcto utilizando la casilla de verificación de destino. Sin embargo, incluir el archivo de encabezado siempre incluye el mismo. Esto es correcto para un objetivo, pero incorrecto para el otro.controlando qué archivo de encabezado de proyecto Xcode incluirá
¿Hay alguna forma de controlar qué archivo de encabezado incluye cada objetivo?
Aquí es mi jerarquía de archivo de proyecto (que se replica en Xcode):
MyProject
TheirOldLib
theirLib.h
theirLib.cpp
TheirNewLib
theirLib.h
theirLib.cpp
myCode.cpp
y myCode.cpp hace tal cosa como:
#include "theirLib.h"
…
somecode()
{
#if OLDVERSION
theirOldLibCall(…);
#else
theirNewLibCall(…);
#endif
}
Y, por supuesto, defino OLDVERSION
por una objetivo y no para el otro.
Tenga en cuenta que #include
debe ser como se muestra. Ambos de los siguientes errores fallar con un archivo no encontrado:
#include "TheirOldLib/theirLib.h"
#include "TheirNewLib/theirLib.h"
Entonces, ¿hay una manera de saber lo que Xcode theirLib.h
para incluir por objetivo?
Restricciones:
- los dos archivos de encabezado tienen el mismo nombre. Como último recurso, podría cambiarle el nombre a uno de ellos, pero preferiría evitarlo, ya que esto provocará un importante tirón de cabello en las otras plataformas.
- tener que cambiar el #include
para agregar una referencia a la carpeta adjunta también es algo que preferiría evitar, porque tendría que hacerlo dos veces con una directiva de compilación condicional.
- Soy libre de modificar mi proyecto ya que de lo contrario me parece bien
Gracias por cualquier ayuda.
Esto funciona perfectamente. Gracias. El póster debería haber marcado esto como Respuesta. – SmallChess
¿No debería en el paso 2. ser "Rutas de búsqueda de encabezado de usuario" en lugar de "Rutas de búsqueda de encabezado"? como usas #include "" y no #include <> – Olof
, supongo que estás en lo cierto. 'Header Search Paths' funciona, pero' User Header Search Paths' debería ser mejor. –