Ich habe drei c-Dateien und deren Header-Dateien:..Makefile Ziel erfordert die Abhängigkeit von anderen Ziel
- main/Programm {c, h}
- lib/lib1 {c, h}
- lib/lib2. {c, h}
program
hängt von lib1.o
, die auf lib2.o
abhängt. program
hängt nicht direkt von lib2.o
ab.
program.main()
Anrufe lib1.func1()
, die lib2.func2()
ruft.
Ich habe zwei Makefile
s; eins im Hauptordner und ein anderes in lib.
lib/Makefile:
all: lib1.o lib2.o
lib1.o: lib2.o lib2.h lib1.h
lib2.o: lib2.h
main/Makefile:
VPATH=../lib
all: program
program: program.o lib1.o lib1.h
$(CC) $(CFLAGS) -o [email protected] $^
Wenn ich laufen make -C main all
, erhalte ich eine undefined reference to 'func2'
Fehler. Beide lib
Objektdateien kompiliert fein.
Muss ich lib2
eine Abhängigkeit von program
machen, obwohl es es nicht direkt aufruft?
Objektdateien sind eigenständige Übersetzungseinheiten. Sie müssen alle Objektdateien auflisten, die für das Ziel 'program' benötigt werden. –
Also muss ich lib2.o als eine Abhängigkeit des Programms enthalten? – retrodev
Wo sind die Rezepte? Sind diese Makefiles nur Schnipsel oder sind sie vollständig? – 2501