2014-01-14 9 views
9

Это немного отличается от Can a Makefile execute code ONLY when an error has occurred?.Может ли GNU выполнять правило при каждом возникновении ошибки?

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

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

(я до сих пор использую GNU сделать 3.81, но я не нашел ничего, в документации нового GNU сделать 4,0 либо)

+0

Нет, GNU make не поддерживает это. Вы можете сделать это, если вы используете рекурсию для обертывания «основного» make, а затем запустите команду, если она не удалась, но это о ней. – MadScientist

ответ

7

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

make || make error_targ 

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

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

normal_targ: 
     ... normal make rules ... 

error_targ: 
     ... other make rules ... 

Это приведет к Makefile, чтобы попытаться построить normal_targ, и тогда и только тогда он выходит из строя, он будет работать error_targ. Это немного сложнее прочитать makefile для неопытных, но он ставит всю логику в одном месте.