Linux robić polecenie służy do budowania i utrzymywania grup programów i plików z kodu źródłowego. W systemie Linux jest to jedno z najczęściej używanych poleceń przez programistów. Pomaga programistom instalować i kompilować wiele narzędzi z poziomu terminala. Ponadto obsługuje proces kompilacji dużych projektów. Oszczędza to czas kompilacji.
Głównym motywem polecenia make jest podzielenie dużego programu na części i sprawdzenie, czy wymaga on ponownej kompilacji, czy nie. Wydaje także niezbędne polecenia ich ponownej kompilacji.
W tej sekcji będziemy używać programów w C++, ponieważ język programowania C++ jest językiem obiektowym, ale możesz używać dowolnego języka zainstalowanego na twoim komputerze. Nie ogranicza się to tylko do programów; możemy go używać również do opisu innych zadań.
Jak działa polecenie make?
Polecenie make przyjmuje cele jako argumenty. Argumenty te są określone w pliku Makefile. Plik makefile zawiera cele, jak również skojarzone z nimi akcje.
Kiedy wykonujemy polecenie make, wyszukuje plik makefile i skanuje go, aby znaleźć cel i uzyskać dostęp do jego zależności. Jeśli zależności nie zostaną określone, wyszuka zależność i ją zbuduje. Zbuduje główny cel po zbudowaniu zależności.
Na przykład, jeśli chcemy zmienić tylko jeden plik źródłowy i wykonamy polecenie make; więc skompiluje to tylko plik obiektowy połączony z tym plikiem źródłowym. Zaoszczędzi to dużo czasu przy końcowej kompilacji projektu.
Co to jest Makefile?
Polecenie make wywołuje wykonanie pliku makefile. Jest to specjalny plik zawierający polecenia powłoki, które tworzymy w celu obsługi projektu. Plik makefile zawiera cele i polecenia do wykonania. Niedozwolone jest tworzenie więcej niż jednego pliku makefile. Zalecane jest utworzenie dla niego osobnego katalogu.
Śledzi najnowsze pliki, więc aktualizuj tylko te pliki, które są wymagane. Jeśli mamy duży program z wieloma plikami źródłowymi, musimy ponownie skompilować wszystkie pliki zależne. Może to więc być niezwykle czasochłonny proces.
Plik makefile zawiera listę standardów. Standardy te są pomocne dla systemu w zrozumieniu, jakie polecenie chcemy wykonać. Normy te składają się z dwóch części i są oddzielone nową linią. Pierwsza linia jest linia zależności, a kolejne linie są uważane za działania lub polecenia S. Polecenia oddzielone są tabulatorem w nowej linii.
The zależności określ relację każdego pliku z plikami źródłowymi. I cel jest plikiem wykonywalnym i jest tworzony po wykonaniu polecenia make.
Opcje
Polecenie make udostępnia różne opcje, aby uczynić go bardziej szczegółowym. Niektóre ważne opcje są następujące:
make -p -f/dev/null.
Przyjrzyjmy się kilku przykładom polecenia make. Zobaczymy podstawowe zastosowanie makefile, a dalej stworzymy kilka programów w C++ i plik makefile. Wykonamy na nich pewne operacje, aby lepiej zrozumieć polecenie make.
supw
Podstawowe użycie polecenia make
Przyjrzyjmy się bardzo podstawowemu zastosowaniu polecenia make, co może pomóc w zrozumieniu jego działania.
Utwórz katalog „projekt” i zmień na niego katalog. Rozważ poniższe polecenia:
mkdir project cd project
Teraz utwórz „plik make” o następującej treści dla pierwszego programu:
przycisk, aby wyśrodkować CSS
say_hello: echo 'Hello World!'
Z powyższego pliku say_hello jest celem, który zachowuje się jak funkcja w dowolnym języku programowania, a echo będzie traktowane jako akcja. Należy pamiętać, że akcję należy zapisać przy użyciu a PATKA. Cel i akcja razem tworzą regułę dla pliku makefile. Teraz wykonaj polecenie make w następujący sposób:
Rozważ poniższe dane wyjściowe:
Z powyższych danych wynika, że wyświetlana jest sama operacja echa. Jeśli nie chcemy wyświetlać polecenia echo na wyjściu, wykonaj echo zaczynając od „@” symbol. Aby stłumić echo, zaktualizuj zawartość pliku makefile w następujący sposób:
say_hello: @echo 'Hello World!'
Rozważ poniższe dane wyjściowe:
Celem może być plik binarny, zależny od działań.
Dodajmy jeszcze kilka celów, takich jak generowanie i wyświetlanie listy w pliku makefile. Zaktualizuj plik makefile w następujący sposób:
say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Jeśli wykonamy polecenie make, wykona ono tylko pierwszy cel, ponieważ jest to domyślny cel pliku makefile. Rozważ poniższe dane wyjściowe:
Możemy zmienić domyślny cel, dołączając poniższą treść do naszego pliku makefile:
.DEFAULT_GOAL := generate
Dodaj go do pierwszej linii pliku w następujący sposób:
Powyższy plik makefile uzna „generowanie” za domyślny cel. Wykonaj polecenie make, które wyświetli wynik w następujący sposób:
Opcja DOMYŚLNY CEL wykona tylko jeden cel, aby określić więcej niż jeden cel, aby użyć wszystkich opcji. Aby określić więcej niż jeden cel, zaktualizuj pierwszą linię pliku makefile w następujący sposób:
all: say_hello generate
Wykona określony cel. Rozważ poniższe dane wyjściowe:
Istnieje inna opcja, która pozwala nam wykonać wszystkie cele. Jeśli chcemy wykonać wszystkie cele pliku makefile, zaktualizuj plik w następujący sposób:
.PHONY: all say_hello generate list say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Powyższy plik wykona wszystkie określone cele. Wykonaj polecenie make, rozważ poniższe dane wyjściowe:
Zaawansowane użycie polecenia make
Stwórzmy projekt w C++ zawierający pliki main.cpp,function1.cpp,function2.cpp i plik zależnościfunction.h.
Kod plików jest następujący:
ciąg znaków w C++
główny.cpp:
#include #include 'functions.h' int main() { print_hello(); std::cout<< std::endl; std::cout<< 'The factorial of 5 is' << factorial(5) << std:: endl; return 0; }
funkcja1.cpp:
#include 'functions.h' int factorial(int n) { if(n!=1) { return (n * factorial(n-1)); } else return 1; }
funkcja2.cpp:
#include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; }
funkcje.h:
void print_hello(); int factorial (int n);
Teraz utwórz plik wykonywalny powyższego projektu, wykonując poniższe polecenie:
g++ main.cpp function1.cpp function2.cpp -o hello
Powyższe polecenie utworzy plik wykonywalny 'Witam' plików main.cpp, Function1.cpp i Function2.cpp.
Rozważ poniższe dane wyjściowe:
Z powyższego wyniku, jeśli zostanie on pomyślnie wykonany, nie da żadnego wyniku.
Wykonajmy to samo zadanie, korzystając z pliku makefile.
Utwórz plik jako Plik Makefile i umieść w nim poniższy kod.
all: g++ main.cpp function1.cpp function2.cpp -o hello
Słowo kluczowe all jest używane dla elementu docelowego, a w nowej linii należy umieścić to samo polecenie z klawiszem TAB, jak powyżej, aby określić operację. Zapisz plik. Rozważ poniższy plik:
Aby wykonać operację, wykonaj polecenie w następujący sposób:
mockito, kiedy tylko chcesz
make
Powyższe polecenie utworzy plik wykonywalny „hello” zawierający określone pliki. Rozważ poniższe dane wyjściowe:
Dodajmy więcej zadań do Makefile. Dodaj zadanie 'skompilować' następująco:
all: compile: g++ main.cpp function1.cpp function2.cpp -o hello
Aby wykonać zadanie skompilować, wykonaj poniższe polecenie:
make compile
Powyższe polecenie wykona zadanie kompilacji. Rozważ poniższe dane wyjściowe:
Wykonajmy jeszcze kilka zadań w naszym pliku makefile.
zaktualizuj plik Makefile w następujący sposób:
all: hello hello: main.o function1.o function2.o g++ main.o function1.o function2.o -o hello main.o: main.cpp g++ -c main.cpp function1.o: function1.cpp g++ -c function1.cpp function2.o: function2.cpp g++ -c function2.cpp clean: rm -rf *o hello
Z powyższego pliku makefile utworzyliśmy trzy obiekty: main.o,function1.o ifunction2.o. Ponadto udostępniliśmy zależności dla obiektów docelowych main.o, funkcja1.o i funkcja2.o odpowiednio jako main.cpp, funkcja1.cpp i funkcja2.cpp. Wszystkie cele będą w nim wykonywać określone zadania. Określiliśmy także czysty cel, aby wyczyścić wszystkie zależności i usunąć plik wykonywalny.
Teraz wykonaj polecenie make all, aby uruchomić nasz nowy plik makefile.
make all
Rozważ poniższe dane wyjściowe:
Z powyższego wyniku wynika, że polecenie najpierw wykonało odpowiednio main.o,function1.o ifunction2.o. Utworzy plik wykonywalny i plik obiektowy podanych plików. Nie wykona czystego celu, ponieważ nie określiliśmy go w hello. Rozważ poniższe pliki:
Polecenie make ma prosty proces działania. Wykonał opcję all i przeszedł do hello. Po wykonaniu hello odczytuje cel w określonej kolejności. Przeszukiwał każdy cel i jego zależności i wykonywał je po kolei.
Aby usunąć obiekty i plik wykonywalny, wykonaj zadanie czyszczenia. Aby wykonać zadanie czyszczenia, wykonaj następujące polecenie:
make clean
Rozważ poniższe dane wyjściowe:
Powyższe polecenie usunie wszystkie obiekty i pliki wykonywalne. Zobacz poniższy snap katalogu:
Na powyższym obrazku widać, że wyczyściliśmy nasz katalog.
Zmienne w poleceniu make
Możemy zdefiniować zmienne w naszym pliku makefile. Aby zdefiniować zmienne, użyj metody „=” operator. Przykładowo, jeśli chcemy utworzyć zmienną A i przypisać do niej polecenie gcc, przypisujemy ją jako:
rdzeń Java, Java
A=g++
Użyj go w następujący sposób w naszym pliku makefile:
hello: hello.cpp ${A} hello.cpp -o hello
Jest przekazywany do terminala jako:
g++ hello.cpp -o hello
Możemy użyć $(A) zamiast ${A}, ponieważ oba są traktowane przez skrypt tak samo.
Komentarze w pliku makefile
Aby dodać komentarz do pliku makefile, użyj metody „#” symbol. Na przykład, aby dodać komentarz w sekcji kompilacji, dodaj go jako '# Spowoduje to skompilowanie programu .' Komentarze są ignorowane przez kompilator.