Что символ процента делает в make-файле? - PullRequest
45 голосов
/ 13 сентября 2011

У меня есть make-файл, который выглядит следующим образом:

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

%-test: 
       Something here

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

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

1 Ответ

40 голосов
/ 13 сентября 2011

Как вы можете прочитать в руководстве по сборке GNU , процент действует как подстановочный знак.Первый аргумент функции patsubst формирует шаблон.Каждый элемент / слово в последнем аргументе сравнивается с этим шаблоном, и, если он совпадает, он заменяется вторым аргументом.Если в шаблоне есть подстановочный знак (%), он будет соответствовать любому количеству символов, и эти символы будут скопированы в строку замены вместо% во втором аргументе.

В вашем примерешаблон является просто подстановочным символом, поэтому он будет соответствовать любому слову в последнем аргументе функции, и это слово будет скопировано в строку замены (второй аргумент) вместо%.

Пример может прояснить ситуацию.Давайте предположим, что TEST_SUBDIRS содержит два имени.

TEST_SUBDIRS := test1 test2
include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS))

Это эквивалентно следующему.

include $(src)/test1/Make.tests $(src)/test2/Make.tests

Make-файл обрабатывается последовательно, строка за строкой.Переменные присваиваются «внутренне», и операторы include заставляют содержимое других файлов вставляться буквально в том месте, после чего это содержимое обрабатывается как часть make-файла.
График зависимостей формируется из правил по мере их появления.прочитайте, и после обработки всего файла будут выполнены необходимые рецепты для обновления запрошенной цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...