Czytałem kilka tutoriali dotyczących plików Makefiles, ale nadal nie jest dla mnie jasne, co oznacza docelowe „all” i co robi.
Jakieś pomysły?
Czytałem kilka tutoriali dotyczących plików Makefiles, ale nadal nie jest dla mnie jasne, co oznacza docelowe „all” i co robi.
Jakieś pomysły?
Odpowiedzi:
Build, w rozumieniu Makefile, składa się z wielu celów. Na przykład, aby zbudować projekt, którego możesz potrzebować
Jeśli zaimplementowałeś ten przepływ pracy z makefile, możesz osobno ustawić każdy z celów. Na przykład, jeśli napisałeś
make file1.o
utworzyłby ten plik tylko wtedy, gdyby było to konieczne.
Nazwa allnie jest ustalona. To tylko konwencjonalna nazwa; alltarget oznacza, że jeśli go wywołasz, make zbuduje wszystko, co jest potrzebne do wykonania pełnej kompilacji . Zwykle jest to fikcyjny cel, który nie tworzy żadnych plików, a jedynie zależy od innych plików. W powyższym przykładzie budowanie wszystkiego, co niezbędne, to tworzenie plików wykonywalnych, a inne pliki są pobierane jako zależności. Więc w pliku makefile wygląda to tak:
all: executable1 executable2
alltarget jest zwykle pierwszym celem w makefile, ponieważ jeśli po prostu napiszesz makew linii poleceń, bez określania celu, zbuduje on pierwszy cel. I ty tego oczekujesz all.
alljest zwykle również .PHONYcelem. Dowiedz się więcej tutaj .
Podręcznik GNU Make podaje jasną definicję na allswojej liście standardowych celów .
Jeśli autor pliku Makefile postępuje zgodnie z tą konwencją, cel allpowinien:
makepowinien zrobić to samo co make all.Osiągnięcie 1 alljest zwykle definiowane jako .PHONYcel zależny od plików wykonywalnych, które tworzą cały program:
.PHONY : all
all : executable
Aby osiągnąć 2, allnależy albo być pierwszym celem zdefiniowanym w pliku make, albo przypisać jako cel domyślny:
.DEFAULT_GOAL := all
Nie jestem pewien, czy oznacza to coś specjalnego. Zgodnie z konwencją podaje się regułę „wszystko” i generalnie jest ona używana do wyszczególnienia wszystkich celów podrzędnych potrzebnych do zbudowania całego projektu, stąd nazwa „wszystkie”. Jedyną wyjątkową rzeczą jest to, że często ludzie umieszczają go jako pierwszy cel w pliku makefile, co oznacza, że samo wpisanie „make” zrobi to samo, co „make all”.
Cel „all” to przykład fałszywego celu - na dysku nie ma nic o nazwie „all”. Oznacza to, że kiedy wykonujesz „make all”, make zawsze myśli, że musi to zbudować, i dlatego wykonuje wszystkie polecenia dla tego celu. Te polecenia będą zazwyczaj budować wszystkie produkty końcowe, o których wie plik makefile, ale mogą zrobić wszystko.
Inne przykłady fałszywych celów to „clean” i „install”, które działają w ten sam sposób.
Jeśli jeszcze go nie czytałeś, powinieneś przeczytać Podręcznik tworzenia GNU , który jest również doskonałym samouczkiem.