En primer lugar, esta respuesta supone que las protecciones incluidas para los dos encabezados son compatibles (es decir, no tienen los mismos símbolos).
Una cosa que puede hacer es crear enlaces en ubicaciones conocidas a los archivos de encabezado de interés, dando a los enlaces nombres propios. Por ejemplo, supongamos que sus dos bibliotecas están instaladas en $ LIB1PATH y $ LIB2PATH, que podrían tener diferentes valores en diferentes entornos de compilación. Por lo tanto, los encabezados que desea obtener están en $ LIB1PATH/include/foo.h y $ LIB2PATH/include/foo.h.
Podría ir de dos maneras con esto. Una es mediante la creación de enlaces directos. Esto podría tener este aspecto en el árbol de directorios de su proyecto:
$PROJDIR/
include/
lib_include/
lib1_foo.h -> $LIB1PATH/include/foo.h
lib2_foo.h -> $LIB2PATH/include/foo.h
src/
Esto podría ser complicado si el código está en un repositorio, porque no se podía comprobar estos enlaces en; estarían equivocados en otros entornos. Además, si tienes muchos de estos enlaces y pocas bibliotecas, tendrías que volver a crearlos cuando lib1 o lib2 se muevan ... no genial. Puede solucionar este problema mediante la creación de enlaces en el directorio que contiene el directorio del proyecto:
$PROJDIR/
include/
lib_include/
lib1_foo.h -> ../../lib1/include/foo.h
lib2_foo.h -> ../../lib2/include/foo.h
src/
lib1 -> $LIB1PATH/
lib2 -> $LIB2PATH/
En ambos casos, es necesario asegurarse de $PROJDIR/lib_include
está en su ruta de inclusión. Además, solo necesita tener $LIB1PATH/include
y $LIB2PATH/include
en su ruta de inclusión si los dos encabezados foo.h
extraen más encabezados de esos directorios. También podría poner los enlaces en include
y deshacerse de lib_include
, pero me gusta mantener estas cosas separadas.
Método 2 es malo porque la compilación del programa depende de un entorno (incluya el fin directorio) no en el código en sí Si alguien tuviera que reconstruir la configuración del proyecto, no será obvio que este problema esté presente, y mucho menos cuál sea la configuración adecuada. –
@Mike Sé que estos no son los mejores métodos, pero son los únicos métodos que tengo en mente ahora. Como no me gustan ninguno de estos métodos, pedí mejores. – Felics