Bawię się plikami makefile i natrafiłem na % .o lub % .c . Z tego, co zrozumiałem, określa wszystkie pliki c lub o . Ale dlaczego to działa:
%.o: %.c
$(CC) -c $^ -o $@
i to nie działa
SOURCE := $(wildcard *.c)
$(SOURCE:.c=.o): SOURCE
$(CC) -c $^ -o $@
Oba wyrażenia określają wszystkie pliki. więc co robi % .o: symbol w pliku make?
Konstrukt:
jest regułą wzorca , która jest rodzajem reguły niejawnej. Określa jeden cel i jedną zależność oraz powoduje jedno wywołanie
$(CC)
dla każdego celu. Kiedy to:jest standardową regułą, ale ma (prawdopodobnie) wiele celów i wiele zależności. Mimo wszystko wywoła to tylko
$(CC)
raz.źródło