GNU Не делает никаких сообщений о Пропавших без вести Фальшивых целях

#makefile #gnu-make

Вопрос:

У меня есть образец файла make ниже. Когда я запускаю make , я не получаю никакого сообщения, в котором говорится, что для этого нет рецепта b . Есть ли способ заставить его отметить это? Без какого-либо сообщения вводит в заблуждение, что с командой все было хорошо, даже если b ее не существовало. В случае отсутствия необходимых файлов мы получаем информативное сообщение, в отличие от фальшивых.

 .PHONY: all a b

.DEFAULT_GOAL := all
    
all: a

a: b
  @echo "All good!"
 

Комментарии:

1. Вы получите сообщение об ошибке, если отсутствует необходимый файл , а не если отсутствует его правило . И с ФАЛЬШИВЫМ правилом файл не нужен. Это интересный технический вопрос, но трудно придумать для него вариант использования.

2. Когда вы объявляете цель .PHONY как make, она создает цель внутренне, чтобы ее можно было пометить как фальшивую. Таким образом, написав .PHONY: b , вы также неявно объявили цель без предварительных условий или рецепта, как если бы вы написали b: . Это не единственный способ, которым это могло бы сработать, но именно так это работает сегодня.

3. Фактический поток немного больше связан с включением вложенных файлов make, поэтому b обычно он определяется во включенном файле. Однако, если он отсутствует по какой-либо причине, я хочу знать об этом, а не делать молчаливое завершение.

4. Фальшивая цель по определению не рассматривается как файл. Поэтому, когда цель является фальшивой, фактическое наличие или отсутствие файла не учитывается.