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 all
nie jest ustalona. To tylko konwencjonalna nazwa; all
target 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
all
target jest zwykle pierwszym celem w makefile, ponieważ jeśli po prostu napiszesz make
w linii poleceń, bez określania celu, zbuduje on pierwszy cel. I ty tego oczekujesz all
.
all
jest zwykle również .PHONY
celem. Dowiedz się więcej tutaj .
Podręcznik GNU Make podaje jasną definicję na all
swojej liście standardowych celów .
Jeśli autor pliku Makefile postępuje zgodnie z tą konwencją, cel all
powinien:
make
powinien zrobić to samo co make all
.Osiągnięcie 1 all
jest zwykle definiowane jako .PHONY
cel zależny od plików wykonywalnych, które tworzą cały program:
.PHONY : all
all : executable
Aby osiągnąć 2, all
należ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.