Skąd aplikacja „make” rozpoznaje domyślny cel do zbudowania, jeśli nie określono żadnego celu?


187

Większość aplikacji linuxowych jest kompilowana z:

make
make install clean

Tak jak to zrozumiałem, make przyjmuje jako argumenty nazwy celów kompilacji. Więc installjest celem, który kopiuje niektóre pliki, a następnie cleanjest celem, który usuwa pliki tymczasowe.

Ale jaki cel makezbuduje, jeśli nie zostaną określone argumenty (np. Pierwsze polecenie w moim przykładzie)?

Odpowiedzi:


231

Domyślnie zaczyna się od przetworzenia pierwszego celu, który nie zaczyna się od .aka domyślnego celu ; aby to zrobić, może być konieczne przetworzenie innych celów - w szczególności tych, od których zależy pierwszy cel.

Podręcznik tworzenia GNU obejmuje wszystkie te rzeczy i jest zaskakująco łatwy i pouczający.


61
Wywołanie pierwszego celu allto tylko konwencja.
Tobu,

1
Przydatne jest uruchamianie ich osobno, jeśli instalujesz dla innych użytkowników, ponieważ wystarczy uruchomić make installin sudo, a nie całą kompilację.
Scott Wales

2
Do Twojej wiadomości domyślny wpis man dla make nie wspomina o tym, co się stanie, gdy nie określisz celu.
Sekm

2
Jeśli GNU tworzy instrukcję dotyczącą tych zagadnień, dlaczego zadaje się to pytanie? Podręcznik doskonale dokumentuje sposób pisania reguł, ale nie wspomina o tym, jak napisać plik Makefile.
Nick

1
Patrzę na plik make, który includejest kolejnym plikiem makefile, którego pierwszym celem jest %.o : %.cpp. Więc domyślnym celem jest ... zbudowanie wszystkich plików .cpp?
Qwertie,

176

Oto krótka odpowiedź, aby zaoszczędzić innym kilka sekund i aby nie musieli czytać instrukcji. Dodaj to na górze pliku make:

.DEFAULT_GOAL := mytarget

mytarget będzie teraz celem, który zostanie uruchomiony, jeśli zostanie wykonane polecenie „make” i nie zostanie określony żaden cel.

Jeśli masz starszą wersję marki (<= 3,80), to nie zadziała. Jeśli tak jest, możesz zrobić to, o czym wspomina anon, po prostu dodaj to na górze pliku make:

.PHONY: default
default: mytarget ;

Odnośniki: https://www.gnu.org/software/make/manual/html_node/How-Make-Works.html


1
@nathan To sprawia, że ​​mytarget jest domyślnym celem, jeśli ktoś uruchomi polecenie „make” bez żadnych parametrów.
Samuel

1
Zauważ, że .DEFAULT_GOAL nie wydaje się być obsługiwany w GNU make v3.80, i zakładam również wcześniejsze wersje (v3.81 to jednak obsługuje). Jeśli używasz starszej wersji make, musisz upewnić się, że domyślny cel jest pierwszym / najwyższym celem w twoim pliku make.
Samuel

4
„... aby uchronić ich przed koniecznością przeczytania instrukcji” to jeden z punktów SO: szybkie odpowiedzi na pytania, które w innym przypadku zajęłyby kopanie w starożytnej dokumentacji.
WattsInABox

1
„Dodaj to do góry pliku make”: Dodawanie do góry nie wydaje się być wymagane.
Aman Deep Gautam

2
To powinna być poprawna odpowiedź. W tym przypadku wyraźne wygrane niejawne.
Sion

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.