Jak można przeczytać w the GNU make manual, procent działa jako wieloznaczny. Pierwszy argument modelu patsubst
function tworzy wzór. Każda pozycja/słowo w ostatnim argumencie jest porównywana z tym wzorcem, a jeśli pasuje, zostaje zastąpiony drugim argumentem. Jeśli w wzorcu znajduje się symbol wieloznaczny (%), dopasuje on dowolną liczbę znaków, a te znaki zostaną skopiowane do ciągu zastępczego w miejscu% w drugim argumencie.
W twoim przykładzie wzorzec jest po prostu symbolem wieloznacznym, więc dopasuje dowolne słowo z ostatniego argumentu do funkcji, a to słowo zostanie skopiowane do ciągu zastępczego (drugi argument) w miejscu% .
Przykład może uprościć sytuację. Załóżmy, że TEST_SUBDIRS
zawiera dwie nazwy.
TEST_SUBDIRS := test1 test2
include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS))
Jest to odpowiednik następującego po nim.
include $(src)/test1/Make.tests $(src)/test2/Make.tests
Plik Makefile jest przetwarzany sekwencyjnie, linia po linii. Przypisania zmiennych są "internalizowane", a instrukcje włączające powodują, że zawartość innych plików jest wstawiana dosłownie w tym miejscu, po czym ta treść jest przetwarzana jako część pliku Makefile.
Graf zależności jest tworzony na podstawie reguł podczas ich odczytywania, a po przetworzeniu całego pliku wykonywane są niezbędne receptury, aby zaktualizować żądany cel.