2010-02-16 10 views

Odpowiedz

22

Makefile wyglądać następująco:

all: mybinary 

mybinary: files.o it.o depends.o on.o 
[tab]$(CC) $(CFLAGS) files.o it.o depends.o on.o -o mybinary 

files.o: files.c files.h 
[tab]$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o [email protected] 

... 

Oznacza to, że po wpisaniu make all (skrótowej jest po prostu wpisać make), to upewnij się, że mybinary docelowa lub plik jest aktualne. Aby to zrobić, musi się upewnić, że plik mbinary jest nowszy niż wszystkie pliki.o it.o depends.o i on.o. Jeśli nie, to używa poleceń powłoki określonych w następnym wierszu, aby zbudować plik mbinary. Ale zanim to zrobi, najpierw upewnia się, że pliki .o itd. Są aktualne. Oznacza to, że muszą być nowsze niż files.c i files.h. Jeśli nie, to używa poleceń powłoki określonych w następnym wierszu do kompilacji files.o. Gdy wszystkie pliki * .o są aktualne, mogą tworzyć pliki mbinary. Po zbudowaniu mbinary, cały cel jest spełniony.

Cele to zazwyczaj tylko pliki. Format bloku jest:

target: list of dependency files 
[tab]shell commands to build target if it's older than any of its dependencies 
[tab]more shell commands 
[tab]still more 

Cele mogą być również określone przy użyciu symboli wieloznacznych, na przykład %.c co oznacza w powłoce, którą nazywamy *.c.

Niektóre cele są "fałszywymi" celami, co oznacza, że ​​nie odpowiadają rzeczywistym plikom. "Cały" cel jest tego rodzaju. Tak też jest "czysty" cel (make clean). I tak dalej. Naprawdę nie potrzebujesz lub chcesz zbudować plik o nazwie "all" lub "clean". Istnieje wiele sposobów, aby określić, że cel jest fałszywy.

Pierwszy cel, który pojawi się w pliku Makefile, będzie pierwszym, który zostanie wywołany po prostu wpisz make. Jedną z konwencji jest nazwać ten cel "wszystkim". Tak więc make będzie taki sam jak make all.

+0

Re "* musi upewnić się, że mój plik mbinary jest nowszy niż wszystkie pliki.o it.o depends.o i on.o *" ...; Jak to się robi? Czy to się dzieje przez porównanie czasu ostatniej modyfikacji pliku? – Pacerier

+0

Tak, porównując ostatnio zmodyfikowane pliki. W rzeczywistości doprowadziło to do stworzenia narzędzia "touch" systemu UNIX, którego celem jest właśnie aktualizacja daty modyfikacji pliku, aby uruchomić kompilację. –

2

Zwykle zawiera kod, aby utworzyć program, zainstalować program, posprzątać później i inne rzeczy.

więc słowo target mogą być różne słowa kluczowe, takie jak all, install, clean itp

To sposób na powiedzenie czegoś dokonać . make all implikuje zrób wszystko

+3

Ściśle rzecz biorąc, polecenie "make all'" oznacza tylko (states) "wykonanie pracy niezbędnej do zapewnienia aktualności" all ". Zwykle ludzie piszą plik Makefile, tak aby zrobił większość tego, co chcesz (na przykład nie instaluje się automatycznie). Ale to tylko konwencja. –

5

"Cel wykonania" to w zasadzie plik, który chcesz przebudować.

Make nie może odgadnąć, co chcesz zbudować, więc musisz powiedzieć, w sposób pośredni lub bezpośredni, co powinien on zbudować. Często pierwszym celem w pliku jest nazwa taka jak "all", a jeśli uruchomisz "make" bez żadnego wyraźnego celu, zbuduje on pierwszy cel wymieniony w makefile. Jednak niektóre pliki Makefile nie określają żadnego celu; następnie musisz podać jeden w linii poleceń. Lub, jeśli nie chcesz zbudować domyślnego celu, musisz określić cel, który chcesz zbudować.

Cel może być również "fałszywy" pod względem tworzenia GNU. Oznacza to, że jest to nazwa, która nie istnieje, a reguły nie tworzą jej, ale ona (fałszywy cel) zależy od wielu innych plików, które mają reguły z nimi związane. Rzeczywiście, cel "wszystko" jest zazwyczaj fałszywym celem - w większości katalogów nie ma pliku o nazwie "all".

1

make to popularne narzędzie programistyczne, które sprawdza daty plików między plikami kodu źródłowego a wygenerowanym z nich kodem obiektowym i kompiluje ten, w którym źródło jest nowsze. Robi to za pomocą pliku o nazwie makefile, który zawiera listę plików, które należy porównać.

Składnia standard jest make /f makefile myprog.exe

To mówi zbudować myprog.exe pomocą listy plików w makefile. Plik Makefile przyjmuje domyślną wartość makefile.mak, więc jeśli używasz tej nazwy, nie musisz jej określać w wierszu poleceń.

myprog.exe tutaj nazywa się cel. Jedna sztuczka polega na tym, że możesz umieścić w makefile listę instrukcji kompilacji dla nieistniejącego pliku. Jeśli powiesz, aby zbudować ten cel, uruchomi on te polecenia. Często pojawia się coś takiego jak make clean, który ma plik tymczasowy usunięty.

+0

"standardowy" co oznacza? – Pacerier

+0

Oznacza to, że większość programów 'make' zaakceptuje tę składnię, aby wykonać to, co opisałem w następnym akapicie. Istnieje wiele wariantów 'make', więc nie mogę mówić za nich wszystkich, ale większość zaakceptuje tę składnię. –

+0

Czy są jednak jakieś zalecane oficjalne "standardy" dla 'make'? – Pacerier