Подтвердить что ты не робот

Что делает символ процента в make файле?

У меня есть make файл, который выглядит так:

include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS))

%-test: 
       Something here

Я понимаю, для чего он предназначен в строке целевого правила. Что означает знак % в первой строке? Есть ли что-нибудь, чтобы сделать знак процента в строке целевого правила?

Когда я пишу make sometarget, все ли строки в make файле, которые не написаны как часть какого-либо правила (например, первая строка в этом make файле) вообще? Если да, то каков порядок исполнения?

4b9b3361

Ответ 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.
График зависимости формируется из правил при их чтении, и после обработки всего файла необходимые рецепты выполняются для обновления запрошенной цели.