Как вы знаете, в *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

Согласитесь, второй проще.

4 Responses to “Shell tricks”

  1. Да, но первый понятнее семантически ;-)
    PS. А еще make умеет так:
    try-clean:
    -rm -rf /

  2. фишка в первом минусе? или в префиксе try-?
    PS:

    ! diff -crN ACME-QuoteDB-e ACME-QuoteDB-0.1.2 > test.patch

    А такое будет гораздо понятней вторым способом

  3. Фишка в “-rm”, префикс “-” перед командой заставляет make (gnu и bsd) игнорировать код возврата.
    Кстати, а “! ” вообще работает? Т.е. вот это в Makefile даст OK?
    test:
    !true
    !false
    @echo OK

  4. аа… фак… ! – это просто инвертирование возвращающего статуса. а за “-” – спасибо

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

© 2012 Андрей Костенко Suffusion theme by Sayontan Sinha