Kriterler: Makefile bir GNU Make Makefile - Makepp, qmake, cmake vb. Ile ilgilenmiyorum. cmake), ama bu iş için ve işte GNU Make kullanıyoruz. En uygun çözüm, sizin için ayrıştıran bir kabuk betiği yerine saf bir Makefile çözümüdür.GNU Makefile eşdeğeri 'TRAP' komutunun eşdeğer tanımlaması için çıkışta yetersizlik tespitinde
Ayrıca bir 'hataya devam et' çözümü yapmak istemiyorum - eğer bozuksa, bozuk ve düzeltilmesi gerekiyor.
Durum şu ki, paralel olarak birkaç dizin oluşturan bir makefile var - bunlardan biri başarısız olursa, elbette tüm yapı başarısız oluyor, ancak tüm çalışma tamamlanıncaya (veya başarısızlığa) kadar devam etmiyor. Bu, gerçekte başarısızlığa uğramanın nedeninin, çıktının çıktısından sonuna kadar keyfi bir yere gömüldüğü anlamına gelir. I ve 'turuncu' başarısız olur '-j 5 yapmak' çalıştırırsanız
all: $(SUBDIRS)
SUBDIRS = \
apple \
orange \
banana \
pineapple \
lemon \
watermelon \
grapefruit
$(SUBDIRS):
cd [email protected] && $(MAKE) $(MFLAGS) 2>&1 | sed -e "s/^/$(notdir $(@)): /g"
- Ben böyle bir tablo görmek istiyorum: Burada
bende ne bir örnek marka sürecin sonuapple - passed
orange - FAILED
banana - passed
pineapple - passed
lemon - passed
bir & & yankı "geçti"> .result || sahip kabul ettik echo "FAILED"> .result, ancak yine de çıkışta onlara yazdırmak için bir çeşit TRAP veya __onexit() cleanup komutuna ihtiyaç duyar.
Herhangi bir Makefile ninjaları bunun için saf makefile çözüm var mı?
un-edit - çözümüm aslında umduğum şekilde çalışmadı .. STYMIED!
Bu durumu muhtemelen 'set -o pipefail' hazırlayarak artırabilirsiniz; '' $ (SUBDIRS) 'komutuna göre, başarısız bir' $ (MAKE) 'un sıfır olmayan çıkış kodu artık 'sed'ün başarılı çıkışı tarafından gizlenmez. – slowdog
Eğer 'turuncu' başarısız olursa, portakal, muz vb. Ile devam etmesini ister misiniz? – Beta
@slowdog - Yapmanın çıkış kodu mutlaka sorun değil, bu iyi bir nokta, sizin için +1 – synthesizerpatel