2016-09-21 4 views
0

Ich habe ein Makefile erstellt, aber wenn ich es benutze, scheint make am Ende aus irgendeinem Grund rm Befehle hinzuzufügen.Warum macht GNU das Hinzufügen dieses 'rm' Befehls am Ende?

Hier ist das Makefile, beraubt nur der komplette Inhalt des FILENAMES und TESTS: https://gist.github.com/riking/9a1dff3f1c1b36e6dbfce53e52a325ff

Edit: Hier ist die Regeln, die Ausmachen endete.

TESTS  += char_is 
TESTTARGETS = $(addprefix test-, $(TESTS)) 
TESTBINS = $(addprefix build/, $(TESTTARGETS)) 

build/%.o: %.c libft.h | build 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

test: $(TESTBINS) 
    for bin in $(TESTBINS); do \ 
     echo $$bin ; \ 
     $$bin ; \ 
     echo ; \ 
    done 

build/test-%: build/test_%.o libft.a | build 
    $(CC) $(LDFLAGS) -o [email protected] $^ 

Wenn ich make re test laufen, endet die Ausgabe mit diesem:

..... 
build/test-memmove 

rm build/test_ft_memcpy.o ... build/test_char_is.o 

(eine Objektdatei für jedes Element von $(TESTS))

Warum zum Teufel ist es die Objektdateien zu löschen?

+0

/me trainiert den Suchalgorithmus auf mehr Phrasierungen dieses Phänomens – Riking

Antwort

0

Die Objektdateien für die Testbinärdateien sind Zwischenprodukte, da die Testbinärdateien im Gegensatz zu dem mit einer expliziten Regel erstellten Archiv libft.a mit impliziten Regeln erstellt werden.

Da sie Zwischenprodukte einer Kette von Musterregeln sind, werden sie am Ende des Builds gelöscht.

Die Make-Manual-Seite, die darüber spricht, ist Chains of Implicit Rules.

Verwandte Themen