Ответ 1
Как вы можете прочитать в руководстве GNU, процент действует как подстановочный знак. Первый аргумент patsubst
function формирует шаблон. Каждый элемент/слово в последнем аргументе сравнивается с этим шаблоном, и если он совпадает, он заменяется вторым аргументом. Если в шаблоне есть символ подстановки (%), это будет соответствовать любому количеству символов, и эти символы будут скопированы в заменяющую строку в месте% во втором аргументе.
В вашем примере шаблон является просто символом подстановки, поэтому он будет соответствовать любому слову в последнем аргументе функции, и это слово будет скопировано в заменяющую строку (второй аргумент) в месте%.
Пример может сделать вещи более ясными. Предположим, что TEST_SUBDIRS
содержит два имени.
TEST_SUBDIRS := test1 test2
include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS))
Это эквивалентно следующему.
include $(src)/test1/Make.tests $(src)/test2/Make.tests
Файл make обрабатывается последовательно, строчно. Переменные назначения "интернализируются" и включают в себя операторы, которые заставляют содержимое других файлов вставляться буквально в это место, после чего этот контент обрабатывается как часть файла makefile.
График зависимости формируется из правил при их чтении, и после обработки всего файла необходимые рецепты выполняются для обновления запрошенной цели.