Может ли GNU заставить выполнить правило при возникновении ошибки?

Это немного отличается от того, может ли Makefile выполнять код ТОЛЬКО при возникновении ошибки?,

Мне бы хотелось, чтобы правило или специальная цель создавались всякий раз, когда возникает ошибка (независимо от заданной цели; без изменения правила для каждой цели, так как другой ответ, по-видимому, подразумевает оператор ||).

В dmake есть специальная цель .ERROR, которая выполняется при обнаружении ошибки. Есть ли подобное в GNU make?

(Я все еще использую GNU make 3.81, но я также не нашел ничего в документации нового GNU make 4.0)

1 ответ

Gnu не поддерживает это явно, но есть способы взломать почти все. Make возвращает 1, если какая-либо из них не удалась. Это означает, что вы можете в командной строке перезапустить make с вашим правилом ошибок, если первый make потерпел неудачу:

make || make error_targ

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

all: 
     $(MAKE) normal_targ || $(MAKE) error_targ

normal_targ:
      ... normal make rules ...

error_targ:
      ... other make rules ...

Это заставит make-файл попытаться собрать normal_targ, и, если это не удастся, он запустит error_targ. Это усложняет чтение make-файла для неопытного, но в нем собрана вся логика.

Другие вопросы по тегам