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?
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 podmake -n
"(lub "make-t" lub "make-q"), gdy polecenia nie są normalnie wykonywane. Zobacz też: POSIX specyfikacja dlamake
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 +
.)
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".
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