Ich habe eine Make-Datei, die ich schrieb, die ein einfaches Beispiel für die automatische Erkennung darstellt, wenn eine Header-Datei mit .depend
von gcc -MM -MF
generiert geändert wird.Warum muss ich in dieser Make-Datei nicht die Voraussetzung ".depend" hinzufügen?
Betrachten Sie das folgende Makefile: Wir haben main.c
und factorial.h
CC=gcc
CFLAGS=-c -Wall
OBJECTS=main.o
SRCS=main.c
EXECUTABLE=program
all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(OBJECTS) -o $(EXECUTABLE)
.depend: $(SRCS)
rm -f ./.depend
$(CC) $(CFLAGS) -MM $^ -MF ./.depend;
sinclude .depend
#main.o: main.c factorial.h
clean:
rm -rf *.o $(EXECUTABLE) .depend
Dies funktioniert gut, und ich möchte wissen, warum! Der gesunde Menschenverstand ist
$(EXECUTABLE): $(OBJECTS) .depend
zu schreiben, weil wir die Datei .depend
ist es überprüfen wollen. Es scheint jedoch, als ob das Auslassen auch funktioniert. Warum? Außerdem würde ich gerne wissen, was include
(oder sinclude
in diesem Fall) tatsächlich tut. Ich denke: in unserem Beispiel würde include .depend
durch
main.o: main.c factorial.h
ersetzt werden, aber auch hier macht der Workflow keinen Sinn. Irgendwelche Experten?
Danke. Wenn Sie Remake das Ziel einer Include-Anweisung sagen, bedeutet dies, dass "include .depend" nach dem Ziel namens ".depend" sucht und seine Anweisung ausführt? – Thenewstockton
@Thenewstockton Genau, aber nur nach dem Einschließen der Datei selbst, die es einem Makefile erlaubt, eine Regel für die Neuerstellung selbst zu enthalten. Offensichtlich würde das hier nicht funktionieren, da '.depend' nicht existiert, wenn make zum ersten Mal aufgerufen wird. – user657267