zwei makefiles zusammenfassen C

Scout-sama

Grünschnabel
Hallo,

ich habe ein kleines Problem. Ich schreibe an einem C Programm, welches aus zwei ausführbaren Dateien bestehen soll (teil1.exe und teil2.exe), die sich Funktionen aus einer seperaten Datei (tools.c) teilen.
Die Makefile für beide Ausführbaren dateien sieht jeweils so aus:

*****

teil2.exe: teil2.o tools.o
gcc -o teil2 teil2.o tools.o

teil2.o: teil2.c tools.h
gcc -c -Wall teil2.c

tools.o: tools.c tools.h
gcc -c -Wall tools.c

clean:
-rm -f *.o teil1

*****

(Für Teil1 das selbe)

Jetzt möchte ich allerdings eine einziege makefile haben, die bei der Ausführung Teil1.exe UND Teil2.exe compiliert.

Allerdings funktioniert es nicht, wenn ich beide Texte der makefiles zu einer kombiniere (es wird dann nur der erste Teil compiliert).
Hat jemand ein Tipp, oder ist es makefilebedingt erst gar nicht möglich.
 
Hallo,
Hat jemand ein Tipp, oder ist es makefilebedingt erst gar nicht möglich.

wäre ja schlimm wenn das nicht gehen würde :)
make bearbeitet defaultmäßig immer die erste Regel eines Makefiles, also in deinem Fall nur teil2.exe bzw teil1.exe.
Was du machen musst ist dir eine Metaregel schreiben welche dann ihrerseits die 2 anderen Regeln aufruft:

Code:
all: teil1.exe teil2.exe

und btw. du kannst dir den expliziten Aufruf des gcc jedesmal im Makefile sparen:

Code:
CFLAGS=-Wall
CC=gcc

all: teil1.exe teil2.exe

teil1.exe: teil1.o tools.o
teil2.exe: teil2.o tools.o

teil1.o: teil1.c tools.h
teil2.o: teil2.c tools.h
tools.o: tools.c tools.h

Gruß,
RedWing
 
Zuletzt bearbeitet:
Das beruhigt mich das es gehen soll.

Allerdings erhalte ich die Fehlermeldung:

4: *** target pattern contains no '%'. Stop.
 
Hallo,
Das beruhigt mich das es gehen soll.

Allerdings erhalte ich die Fehlermeldung:

4: *** target pattern contains no '%'. Stop.

mhm leider kann ich dir bei dem Fehler auch nicht weiterhelfen. Evtl. probierst dus mal so:

Code:
CFLAGS=-Wall
CC=gcc
PROG1=teil1.exe
PROG2=teil2.exe
OBJS= teil1.o teil2.o

%.o: %.c tools.h

all: $(PROG1) $(PROG2)

$(PROG1): teil1.o tools.o
$(PROG2): teil2.o tools.o

# dependencies
$(OBJS): tools.h

Gruß,
RedWing
 
Ohh,

ich glaube ich hatte einen Fehler drinn und habe:

all: teil1.exe: teil2.exe

geschrieben (ein mal Doppelpunkt zu viel).

Hat nun also alles wunderbar geklapp. Vielen Dank.
 
Hallo,
Ohh,

ich glaube ich hatte einen Fehler drinn und habe:

all: teil1.exe: teil2.exe

geschrieben (ein mal Doppelpunkt zu viel).

Hat nun also alles wunderbar geklapp. Vielen Dank.

ich befürchte das war mein Fehler. Hatte beim ursprünglichen Post noch einen : drin, deswegen auch der Edit. Hatte nicht geahnt das du so schnell liest ;)

Gruß,
RedWing
 
Aja, ich habe mich schon als ich den Fehler festgestellt habe gewundert, wie ich dazu kommen konnte dort ein ":" einzufügen und meinte schwören zu können das ganze 1:1 kopiert und übernommen zu haben.
:)
 
Zurück