Co@, - i + robią jako prefiksy do linii receptur w Make?

W podręczniku GNU Makefile wymienia te prefiksy.

If .Jest oneshell, wtedy tylko pierwsza linia przepisu będzie sprawdzana pod kątem znaków specjalnych prefiksów ( ' @ ' , ' - 'i'+').

Co robią te przedrostki i gdzie są wymienione?

Author: Jonathan Leffler, 2010-08-13

2 answers

Kontrolują zachowanie make dla oznaczonych linii poleceń:

  • @ wyłącza zwykłe "echo" wykonywanego polecenia.

  • - oznacza ignorowanie statusu zakończenia wykonywanego polecenia (Zwykle niezerowy status 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 też: POSIX specyfikacja dla make a także §9.3 instrukcji GNU Make.

Notacja + jest (standaryzowanym POSIX) uogólnieniem de facto (niestandardowego) mechanizmu, w którym linia poleceń zawierająca ${MAKE} lub $(MAKE) jest wykonywana pod make -n.

(@ jest omawiany w §5.2 instrukcji GNU Make; - jest opisany w §5.5; oraz §5.7.1 wspomina o użyciu +.)

 262
Author: Jonathan Leffler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-06 06:39:27

@ zapobiega przedostawaniu się wiersza poleceń do konsoli. Możesz to zrobić globalnie za pomocą -s lub --keep-silent

- mówi make, aby kontynuować, nawet jeśli polecenie nie powiedzie się z jakiegoś powodu. Możesz to zrobić globalnie za pomocą znacznika -i (lub --ignore-errors).

+ nie byłem z nią zaznajomiony, zanim o to zapytałeś. Z tego co wiem, neguje to efekt -n, -t, i -q, które w zasadzie mówią make, aby nie uruchamiał poleceń. Więc linia z + z przodu i tak by uciekli.

Jeśli przeczytacie oficjalny podręcznik Gnu Make, wszystkie są wymienione w rozdziale 5. W mojej starej kopii podręcznika, który był rozdział na "polecenia" , ale term du jour teraz wydaje się być "przepisy".

 42
Author: T.E.D.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-13 14:02:02