Nov 192009
Как вы знаете, в *nix команда возвращает после своего выполнения статус, с которым она выполнилась. Как правило 0 — если всё ок, и !0 — если произошла ошибка.
В makefile, если какая-то команда вернула ненулевой статус, то выполнение прекращается. Чтобы заставить makefile выполняться дальше, есть два способа:
diff -crN ACME-QuoteDB-e ACME-QuoteDB-0.1.2 || true
и
! diff -crN ACME-QuoteDB-e ACME-QuoteDB-0.1.2
Согласитесь, второй проще.
Да, но первый понятнее семантически
PS. А еще make умеет так:
try-clean:
-rm -rf /
фишка в первом минусе? или в префиксе try-?
PS:
А такое будет гораздо понятней вторым способом
Фишка в “-rm”, префикс “-” перед командой заставляет make (gnu и bsd) игнорировать код возврата.
Кстати, а “! ” вообще работает? Т.е. вот это в Makefile даст OK?
test:
!true
!false
@echo OK
аа… фак… ! – это просто инвертирование возвращающего статуса. а за “-” – спасибо