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

Antworten:


112

Sie müssen jedem Verzeichnis Folgendes voranstellen -I:

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

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)

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.