Co @, - i + robią jako przedrostki wierszy receptur w programie Make?

172

W podręczniku GNU Makefile wspomina o tych przedrostkach.

Jeśli podano .ONESHELL, tylko pierwsza linia receptury zostanie sprawdzona pod kątem specjalnych prefiksów („@”, „-” i „+”).

Co robią te przedrostki i gdzie są wymienione?

Matt Joiner
źródło

Odpowiedzi:

235

Kontrolują zachowanie make dla oznakowanych linii poleceń:

  • @ tłumi normalne „echo” wykonywanego polecenia.

  • - oznacza zignorowanie statusu wyjścia wykonywanego polecenia (normalnie niezerowy kod zakończenia zatrzymałby tę część kompilacji).

  • +oznacza „wykonaj to polecenie pod make -n” (lub „make -t” lub „make -q”), gdy polecenia nie są normalnie wykonywane. Zobacz także specyfikację POSIX dla, makea także §9.3 podręcznika GNU Make.

+Notacja oznacza (POSIX znormalizowany) uogólnienie faktycznie (niestandaryzowanych) mechanizm, poprzez linię rozkazu z ${MAKE}lub $(MAKE)jest realizowane na podstawie make -n.

( @Omówiono w §5.2 GNU ręczne wprowadzanie, -jest opisany w §5.5 , a §5.7.1 wspomniano o zastosowaniu +).

Jonathan Leffler
źródło
41

@zapobiega wyświetlaniu echa wiersza poleceń w konsoli. Możesz to zrobić globalnie za pomocą -slub--keep-silent

-nakazuje programowi kontynuowanie działania, nawet jeśli polecenie zawodzi z jakiegoś powodu. Możesz to zrobić globalnie za pomocą -iflagi (lub --ignore-errors).

+Nie znałem się, zanim zapytałeś. Tak blisko, jak mogę powiedzieć, że neguje efekt -n, -ti -q, z których każdy w zasadzie powiedzieć wnieść w nie faktycznie uruchomić polecenia. Więc linia z +przednią i tak by została uruchomiona.

Jeśli przeczytałeś oficjalną instrukcję Gnu Make, wszystkie zostały wymienione w rozdziale 5 . W moim starym egzemplarzu podręcznika był to rozdział o „poleceniach”, ale termin du jour wydaje się teraz oznaczać „przepisy”.

PRZETRZĄSAĆ
źródło