Что означают цели в Makefile, начинающиеся с., И чем они отличаются / похожи на суффиксные правила? - PullRequest
0 голосов
/ 25 мая 2019

В Makefile я видел это:

all: .made

# ... some other code

.made: $(Program) bashbug
    @echo "$(Program) last made for a $(Machine) running $(OS)" >.made

Является ли правило .made суффиксным правилом согласно: https://www.gnu.org/software/make/manual/make.html#Suffix-Rules?

Кроме того, все правила с целями имеютa . в правилах перед суффиксами?

В противном случае, каково значение целей, с которых начинается.?Похоже, что по этому поводу есть значение в https://www.gnu.org/software/make/manual/make.html#How-Make-Works:

По умолчанию make начинается с первой цели (не цели, имена которых начинаются с '.').

Но его значение не упоминается.

Кроме того, если это правило с суффиксами, почему .made может использоваться как обязательное условие во всем правиле?(Не упоминается, что цели суффиксных правил могут использоваться в качестве предварительных условий в других правилах.)

PS: Этот вопрос связан с , но для чего он предназначен, но отличается от него.(точка) перед целью в make-файле .Этот вопрос явно задает разницу между целью с.и цель суффиксного правила.

1 Ответ

1 голос
/ 25 мая 2019

Является ли правило .made правилом суффикса

Нет, поскольку .made не является "известным суффиксом".

Такжевсе правила с целями, которые имеют . в правилах переднего суффикса?

Нет, только те, в которых слово после точки является "известным суффиксом":

Ваши первые дваответы на вопросы https://www.gnu.org/software/make/manual/make.html#Suffix-Rules:

Определения суффиксного правила распознаются путем сравнения цели каждого правила с определенным списком известных суффиксов.Когда make видит правило, целью которого является известный суффикс, это правило считается правилом с одним суффиксом.Когда make видит правило, целью которого является сцепление двух известных суффиксов, это правило принимается как правило с двойным суффиксом.

В вашем примере .made - это действительное имя файла.Ваш Makefile имеет правило для создания / обновления файла:

#vvvv
.made: $(Program) bashbug
        @echo "$(Program) last made for a $(Machine) running $(OS)" >.made
#                                                                    ^^^^^

Все довольно нормально;он будет работать так же, как и с любым другим именем.

Единственное значение начальной точки состоит в том, что он делает файл «скрытым» по соглашению, то есть ls не будет его показывать (без указания * 1032).*), обычный * не будет соответствовать и т. д.

...