#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. Фальшивая цель по определению не рассматривается как файл. Поэтому, когда цель является фальшивой, фактическое наличие или отсутствие файла не учитывается.