GNU make: запустить цель после всех остальных, независимо от сбоев? - PullRequest
2 голосов
/ 14 октября 2011

У меня есть make-файл с некоторыми целями (скажем, от data1 до dataN, от которых зависит alldata), которые генерируют некоторые данные, и цель prettify, которая перебирает выходные данные и создает симпатичный отчет. (примечание: существует множество dataN целей, а make-файл генерируется машиной)

Некоторые из dataX целей иногда терпят неудачу, но я все равно хотел бы запустить prettify, поэтому prettify не зависит от alldata.

Есть ли способ запустить эквивалент make -k alldata || make prettify за один вызов make, такой, что make делает все возможное для построения всех данных, а затем создает мой отчет на основе того, что было сделано?

Ответы [ 3 ]

2 голосов
/ 14 октября 2011

Вы можете написать рекурсивную цель с любой логикой управления, которая вам нравится.Это не мешает кому-либо запускать цель из командной строки, поэтому вы не можете применить свою логику, но это удобно для удобства цели.Примерно так, может быть:

.PHONY: all
all:
        $(MAKE) -k -$(MAKEFLAGS) alldata \
        ; rc=$$? \
        ; $(MAKE) $(MAKEFLAGS) prettify \
        ; exit $$rc
1 голос
/ 14 октября 2011

Make обычно выручает при сбое команды. Если вы поставите «|| true» за неудачной командой, make продолжит выполняться, что означает, что ваше prettify также будет выполнено.

...