Kryteria: Makefile to GNU Make Makefile - nie interesuje mnie makepp, qmake, cmake, itp. Wszystkie są ładne (szczególnie cmake), ale to jest do pracy i do pracy używamy GNU Make. Optymalnym rozwiązaniem jest czyste rozwiązanie Makefile zamiast skryptu powłoki, który parsuje dla ciebie.GNU Makefile odpowiednik polecenia shell 'TRAP' dla zwięzłej identyfikacji niepowodzenia kompilacji przy wyjściu
Ja także nie chcę robić rozwiązania "kontynuuj na porażce" - jeśli jest uszkodzone, jest zepsute i musi zostać naprawione.
Sytuacja jest następująca: Mam plik makefile, który równolegle buduje kilka katalogów - jeśli jeden z nich zawiedzie, oczywiście cała kompilacja się nie powiedzie, ale nie, dopóki wszystkie uruchomienia nie zakończą się (lub nie powiodą się). Oznacza to, że powód, dla którego faktycznie się nie udało, jest pochowany gdzieś arbitralnie daleko od końca produkcji kreacji.
Oto przykład tego, co mam:
all: $(SUBDIRS)
SUBDIRS = \
apple \
orange \
banana \
pineapple \
lemon \
watermelon \
grapefruit
$(SUBDIRS):
cd [email protected] && $(MAKE) $(MFLAGS) 2>&1 | sed -e "s/^/$(notdir $(@)): /g"
jeśli uruchomię „make -j 5” i „pomarańczowe” dzieje się niepowodzeniem - Chciałbym zobaczyć tabelę tak u koniec procesu make
apple - passed
orange - FAILED
banana - passed
pineapple - passed
lemon - passed
ja uważane mającą & & echo "przeszedł"> .result || echo "FAILED"> .result, ale nadal potrzebuje jakiegoś polecenia czyszczenia TRAP lub __onexit(), aby wydrukować je przy wyjściu.
Każdy ninja z gry Makefile ma do tego rozwiązanie z czystym makefile?
un-edit - moje rozwiązanie nie działało tak jak miałem nadzieję ... STYMIED!
Prawdopodobnie możesz poprawić tę sytuację, poprzedzając 'set -o pipefail; 'do polecenia' $ (SUBDIRS) ', więc niezerowy kod wyjścia nieudanego' $ (MAKE) 'nie jest już ukryty przez pomyślne zakończenie' sed'. – slowdog
Jeśli 'pomarańczowy' nie powiedzie się, chcesz kontynuować z pomarańczą, bananem itp.? – Beta
@slowdog - Kod zakończenia make niekoniecznie jest problemem, ale to dobra rzecz, +1 dla ciebie – synthesizerpatel