Co następuje w pliku Makefile?
rule: $(deps)
@:
Nie mogę znaleźć tego w instrukcji tworzenia.
Oznacza to „nie powtarzaj tego polecenia na wyjściu”. Więc ta reguła mówi: „wykonaj polecenie powłoki :
i nie wyświetlaj wyników.
Oczywiście polecenie powłoki :
nie działa, więc oznacza to „nic nie rób i nie mów”.
Czemu?
Sztuczka polega na tym, że masz niejasną kombinację dwóch różnych składni. Make (1) składnia jest wykorzystanie działania zaczynając @, który jest po prostu nie do echo polecenia. Więc taka reguła
always:
@echo this always happens
nie wyemituje
echo this always happens
this always happens
Teraz częścią akcji reguły może być dowolne polecenie powłoki, w tym :
. Pomoc Bash wyjaśnia to, jak również wszędzie:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
@:
(nie tylko@
), to oprócz odpowiedzi @ guestolio może to być również resztka po rozwoju. To jak pisanie funkcji w Pythonie, która zawiera tylko plikipass
. Może być przydatne do tworzenia bloków kodu do kopiowania / wklejania, ale generalnie nie powinny one istnieć długo. Podczas krojenia w ten sposób plik nadal się kompilował, przeszedłDla tych, którzy są ciekawi, dlaczego możesz to zrobić, przydaje się, jeśli chcesz udawać, że coś zostało zrobione, tak aby Make nie wyświetlał „Nic do zrobienia dla” twojego celu.
Jednym z przykładów jest sytuacja, gdy masz fałszywy cel, który zawsze wykonujesz, aw poleceniu znajduje się kilka warunków. Chcesz mieć przynajmniej coś na wypadek, gdyby te warunki okazały się fałszywe i nic nie zostało zrobione.
Na przykład (ze skryptów Linuksa / Makefile.clean):
źródło