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?
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?
Odpowiedzi:
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, make
a 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 +
).
@
zapobiega wyświetlaniu echa wiersza poleceń w konsoli. Możesz to zrobić globalnie za pomocą -s
lub--keep-silent
-
nakazuje programowi kontynuowanie działania, nawet jeśli polecenie zawodzi z jakiegoś powodu. Możesz to zrobić globalnie za pomocą -i
flagi (lub --ignore-errors
).
+
Nie znałem się, zanim zapytałeś. Tak blisko, jak mogę powiedzieć, że neguje efekt -n
, -t
i -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”.