So definieren Sie mehrere Include-Pfade in Makefile

96

Neu in C ++; Grundlegendes Verständnis von Includes, Bibliotheken und dem Kompilierungsprozess. Habe noch ein paar einfache Makefiles gemacht.

Mein aktuelles Projekt beinhaltet die Verwendung einer informix DB-API und ich muss Header-Dateien in mehr als einem nicht standardmäßigen Verzeichnis enthalten. Wie schreibe ich das? Havent hat im Internet etwas gefunden, wahrscheinlich weil ich keine guten Suchbegriffe verwendet habe

Dies ist eine Möglichkeit, was ich versucht habe (funktioniert nicht). Nur um das Makefile zu zeigen

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
quelle

Antworten:

112

Sie müssen jedem Verzeichnis Folgendes voranstellen -I:

INC=-I/usr/informix/incl/c++ -I/opt/informix/incl/public
Antoine Pelisse
quelle
1
Es funktioniert immer noch nicht für mich, obwohl es manuell ausgeführt wird.
NoBugs
92

Sie müssen -Imit jedem Verzeichnis verwenden. Sie können die Verzeichnisse jedoch weiterhin mit Leerzeichen abgrenzen, wenn Sie (GNU) make's verwenden foreach:

INC=$(DIR1) $(DIR2) ...
INC_PARAMS=$(foreach d, $(INC), -I$d)
wilhelmtell
quelle
9
+ Das habe ich hier gesucht. $(foreach,,)
Jonathon Reinhart
16
Oder kürzer: INC_PARAMS=$(INC:%=-I%)mit Substitutionen . $(foreach,,)ist besser lesbar, aber Substitutionen werden so häufig verwendet, dass es gut ist, sich mit ihrer Funktionsweise vertraut zu machen.
Skalee
5
oder INC_PARAMS = $(addprefix -I,$(INC)).
Ma Ming
Ich bin auch hierher gekommen $(foreach,,).
J. Doe