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

Respuestas:


112

Tienes que anteponer cada directorio con -I:

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

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)

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.