Cómo definir varias rutas de inclusión en Makefile

96

Nuevo en C ++; Comprensión básica de inclusiones, bibliotecas y el proceso de compilación. Hice algunos archivos MAKE simples todavía.

Mi proyecto actual implica el uso de una api de DB de informix y necesito incluir archivos de encabezado en más de un directorio no estándar. ¿Cómo escribir eso? No encontré nada en la red, probablemente porque no utilicé buenos términos de búsqueda.

Esta es una de las formas en que intenté (no funciona). Solo para mostrar el archivo MAKE

LIB=-L/usr/informix/lib/c++
INC=-I/usr/informix/incl/c++ /opt/informix/incl/public

default:    main

main:   test.cpp
        gcc -Wall $(LIB) $(INC) -c test.cpp
        #gcc -Wall $(LIB) $(INC) -I/opt/informix/incl/public -c test.cpp

clean:
        rm -r test.o make.out
groovehunter
fuente

Respuestas:

112

Tienes que anteponer cada directorio con -I:

INC=-I/usr/informix/incl/c++ -I/opt/informix/incl/public
Antoine Pelisse
fuente
1
Todavía no funciona para mí, aunque ejecutar gcc manualmente lo hace.
NoBugs
92

Necesita usar -Icon cada directorio. Pero aún puede delimitar los directorios con espacios en blanco si usa marcas (GNU) foreach:

INC=$(DIR1) $(DIR2) ...
INC_PARAMS=$(foreach d, $(INC), -I$d)
Wilhelmtell
fuente
9
+ Esto es lo que vine a buscar aquí. $(foreach,,)
Jonathon Reinhart
16
O más corto: INC_PARAMS=$(INC:%=-I%)con sustituciones . $(foreach,,)es más legible, pero las sustituciones se utilizan con tanta frecuencia que es bueno familiarizarse con su funcionamiento de todos modos.
skalee
5
o INC_PARAMS = $(addprefix -I,$(INC)).
Ma Ming
Vine aquí $(foreach,,)también.
J. Doe