Выполняются ли неявные правила шаблона, даже если уже было другое правило, которое соответствует цели? - PullRequest
0 голосов
/ 09 января 2019

В основном, если у меня есть цель, у которой уже есть правило, но она соответствует другому неявному правилу шаблона. Как сделать, чтобы справиться с этой ситуацией?

targ.bin :: dep

dep: some-req
   some rules

%.bin : some-reqs
   some rules

В этом случае применяются ли оба правила к targ.bin? Смысл, вызовет ли dep его предварительные требования и правила, а затем выполнит неявные предварительные требования и правила шаблона% .bin?

1 Ответ

0 голосов
/ 09 января 2019

См. Руководство по GNU Make 4.13 Правила двоеточия , особенно:

В каждом правиле двойного двоеточия должен быть указан рецепт; если это не так, неявное правило будет использоваться, если оно применяется. См. Использование неявных правил.

Правило двойного двоеточия:

targ.bin :: dep

не имеет рецепта. Поэтому он выражает только зависимость targ.bin -> dep и неявное правило:

%.bin : some-reqs
   some rules

указывает, что targ.bin должно быть обновлено путем выполнения:

some rules

а также подразумевает зависимость targ.bin -> some-reqs.

Марка объединяет все предпосылки цели targ.bin. Итак, ваш Makefile подразумевает, что:

dep: some-req
   some rules

targ.bin : some-reqs dep
   some rules

- полный рецепт для targ.bin. Как утверждают:

Makefile

targ.bin :: dep

dep: a
    echo '$@ -> $^'

%.bin : b
    echo '$@ -> $^'

, который работает как:

$ touch a b
$ make
echo 'dep -> a'
dep -> a
echo 'targ.bin -> b dep'
targ.bin -> b dep

Позже

Предположим, что в приведенном вами примере с правилом двойного двоеточия есть рецепт, означает ли это, что неявное правило не будет применяться?

См. 10.1 Использование неявных правил , особенно:

Как правило, производите поиск неявного правила для каждой цели и для каждого правила с двойным двоеточием, которое не имеет рецепта.

Так что да, если бы у правила двойного двоеточия был рецепт, то неявное правило не было бы применено. Я оставлю тебе эксперимент.

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