logo

Linux make команда

Linux направи Командата се използва за изграждане и поддържане на групи от програми и файлове от изходния код. В Linux това е една от най-често използваните команди от разработчиците. Той помага на разработчиците да инсталират и компилират много помощни програми от терминала. Освен това той управлява процеса на компилиране на големи проекти. Спестява време за компилация.

Основният мотив на командата make е да раздели голяма програма на части и да провери дали трябва да бъде прекомпилирана или не. Освен това издава необходимите заповеди за прекомпилирането им.

В този раздел ще използваме C++ програми, тъй като езикът за програмиране C++ е обектно-ориентиран език, но можете да използвате всеки език, инсталиран на вашата машина. Не се ограничава само до програми; можем да го използваме и за описание на други задачи.

Как работи командата make?

Командата make приема цели като аргументи. Тези аргументи са посочени в „Makefile“. Makefile съдържа целите, както и свързаните действия, свързани с тези цели.

Когато изпълним командата make, тя търси make-файла и го сканира, за да намери целта и достъп до нейните зависимости. Ако зависимостите не са посочени, той ще търси зависимостта и ще я изгради. Той ще изгради основната цел, след като зависимостите бъдат изградени.

Например, ако искаме да променим само един изходен файл и изпълним командата make; така че това ще компилира само обектния файл, който е свързан с този изходен файл. Това ще спести много време при окончателното компилиране на проекта.

Какво е Makefile?

Командата make извиква изпълнението на make-файла. Това е специален файл, който съдържа командите на shell, които създаваме, за да поддържаме проекта. Makefile съдържа цели и команди за изпълнение. Не е разрешено създаването на повече от един makefile. Препоръчително е да създадете отделна директория за него.

Той следи последните файлове, така че актуализирайте само онези файлове, които са необходими. Ако имаме голяма програма с много изходни файлове, трябва да прекомпилираме всички зависими файлове. Така че процесът може да отнеме много време.

Makefile има списък със стандарти. Тези стандарти са полезни за системата, за да разбере каква команда искаме да изпълним. Тези стандарти са в две части и разделени с нов ред. Първият ред е линията на зависимост, и следващите редове се считат за действия или команда с. Командите са разделени с разделител в новия ред.

The зависимости укажете връзката на всеки файл с изходните файлове. И на мишена е изпълним файл и се създава след изпълнението на командата make.

Настроики

Командата make улеснява различни опции, за да го направи по-специфичен. Някои важни опции са както следва:

    -b, -m:Тези опции се използват за игнориране на съвместимостта за различните версии на командата make.-B, --винаги-правя:Тези опции се използват за безусловно създаване на всички цели.-C dir, --directory=dir:Тези опции се използват за промяна на директорията, преди да се изпълни makefile.-д:Използва се за отпечатване на информация за отстраняване на грешки.--debug[=ФЛАГОВЕ]:Използва се за отпечатване на информацията за отстраняване на грешки заедно с нормалната обработка. Ако пропуснем флага, той ще покаже подобни резултати като опцията '-d'.-e, --среда-заменя:Използва се за предоставяне на променливите, взети от приоритета на средата, за makefile.-f файл, --file=файл, --makefile=ФАЙЛ:Използва се за използване на файл като makefile.-i, --ignore-грешки:Опцията '-i' се използва за игнориране на всички грешки в командите.-I dir, --include-dir=dir:Използва се за указване на директория за търсене на посочения makefile. Ако посочим многото опции „-I“, ще търси в многото директории в реда, в който са посочени.-j [работи], --работи [=работи]:Използва се за определяне на броя на заданията, които да се изпълняват едновременно. Ако предоставим много опции „-j“, последната ще се счита за изпълнена. Ако не посочим броя на заданията, това няма да ограничи заданията, които могат да се изпълняват едновременно.-k, --продължавам:Използва се за продължаване на програмата възможно най-дълго след получаване на грешка.-l [зареждане], --load-average[=зареждане]:Използва се, за да се укаже, че не трябва да се стартира нова задача, ако други задачи са в опашката и средното натоварване е минимално.-n, --just-print, --dry-run, --recon:Използва се за показване на командата, която ще бъде изпълнена.-o файл, --old-file=файл, --assume-old=файл:Използва се, за да се гарантира, че make няма да преработи файла, дори ако е по-стар от неговите зависимости.-O[тип], --output-sync[=тип]:Използва се за потвърждение, че резултатът от всяка задача е събран, а не смесен резултат от други задачи. Полезно е за обработка на множество задачи с опцията '-j'.-p, --print-база-данни:Използва се за отпечатване на базата данни, която се създава след прочитане на makefiles. Също така е полезно да отпечатате информацията за версията, когато се използва с опцията '-v'. За да отпечатате базата данни, без да се опитвате да преработвате файлове, изпълнете командата, както следва:
    make -p -f/dev/null.-q, --въпрос:Опцията '-q' се използва за Режим на въпроси. Няма да изпълни никаква команда или да отпечата нищо. Той ще върне само състояние на изход е нула, ако указаната цел вече е синхронизирана; в противен случай ще покаже ненулев статус на излизане.-r, --no-builtin-rules:Използва се за премахване на използването на вградените имплицитни правила.-R, --без вградени променливи:Полезно е, ако не искаме да дефинираме вградена променлива.-s, --безшумен, --тих:Тези опции се наричат Безшумна работа. Той ограничава отпечатването на командите, докато се изпълняват.-S, --no-keep-going, --stop:Използва се за отмяна на ефекта от операцията '-k, --keep-going'.-t, --докосване:Използва се за докосване на файлове, вместо да изпълнява техните команди.--следа:Използва се за проследяване на разположението на всяка цел.-v, --версия:Използва се за отпечатване на инсталираната версия на помощната програма make. Освен това той показва списък с автори, авторски права и някои бележки относно помощната програма make.-w, --print-директория:Използва се за проследяване на съобщение за печат, което съдържа работна директория преди и след друга обработка. Полезно е да се проследят грешки от сложната структура на рекурсивната команда make.--no-print-directory:Използва се за изключване на опцията '-w'.-W файл, --what-if=файл, --new-file=файл, --assume-new=файл:Тези опции се преструват, че целевият файл току-що е бил модифициран.--warn-undefined-variables:Тази опция се използва за предупреждение, че се препраща към недефинирана променлива.

Нека разберем някои примери за командата make. Ще видим основното използване на makefile и освен това ще създадем някои C++ програми и makefile. Ще извършим някои операции върху тях, за да разберем по-добре командата make.

python генерира uuid

Основно използване на командата make

Нека разберем основното използване на командата make и това може да ви помогне да разберете как работи.

Създайте директория „проект“ и сменете директорията към нея. Помислете за командите по-долу:

 mkdir project cd project 

Сега създайте a 'Makefile' със следното съдържание за първата програма:

 say_hello: echo 'Hello World!' 

От горния файл say_hello е цел, която се държи като функция във всеки език за програмиране и ехото ще се счита за действие. Трябва да се помни, че действието трябва да бъде написано с помощта на a РАЗДЕЛ. Целта и действието заедно създават правило за make-файла. Сега изпълнете командата make както следва:

Помислете за резултата по-долу:

Linux make команда

От горния изход можем да видим, че се показва самата ехо операция. Ако не искаме да показваме командата echo на изхода, изпълнете ехото, започвайки с '@' символ. За да потиснете ехото, актуализирайте съдържанието на makefile, както следва:

 say_hello: @echo 'Hello World!' 

Помислете за резултата по-долу:

Linux make команда

Целта може да бъде двоичен файл, който зависи от действията.

Нека добавим още няколко цели, като генериране и списък в make-файла. Актуализирайте makefile-а, както следва:

колко голям е този монитор
 say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls 

Ако изпълним командата make, тя изпълнява само първата цел, защото това е целта по подразбиране на make-файла. Помислете за резултата по-долу:

Linux make команда

Можем да променим целта по подразбиране, като включим съдържанието по-долу в нашия makefile:

 .DEFAULT_GOAL := generate 

Добавете го към първия ред на файла, както следва:

Linux make команда

Горният makefile ще счита „генериране“ за цел по подразбиране. Изпълнете командата make и тя ще даде изхода, както следва:

Linux make команда

Опцията ЦЕЛ ПО ПОДРАЗБИРАНЕ ще изпълни само една цел, за да посочите повече от една цел, за да използвате всички опции. За да посочите повече от една цел, актуализирайте първия ред на make-файла, както следва:

 all: say_hello generate 

Той ще изпълни определената цел. Помислете за резултата по-долу:

Linux make команда

Има и друга опция, която ни позволява да изпълним всички цели. Ако искаме да изпълним всички цели на make-файла, актуализирайте файла, както следва:

 .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 

Горният файл ще изпълни всички посочени цели. Изпълнете командата make, разгледайте резултата по-долу:

Linux make команда

Разширено използване на командата make

Нека създадем C++ проект с файлове main.cpp, function1.cpp, function2.cpp и файл на зависимостите function.h.

Кодът на файловете е както следва:

типове съединения в rdbms

main.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; } 

функция1.cpp:

 #include 'functions.h' int factorial(int n) { if(n!=1) { return (n * factorial(n-1)); } else return 1; } 

функция2.cpp:

 #include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; } 

functions.h:

 void print_hello(); int factorial (int n); 

Сега създайте изпълним файл на горния проект, като изпълните командата по-долу:

 g++ main.cpp function1.cpp function2.cpp -o hello 

Горната команда ще създаде изпълним файл 'Здравейте' на файловете main.cpp, function1.cpp и function2.cpp.

Помислете за резултата по-долу:

Linux make команда

От горния изход, ако се изпълни успешно, той няма да даде никакъв изход.

Нека изпълним същата задача с помощта на makefile.

Създайте файл като Makefile и поставете кода по-долу в него.

 all: g++ main.cpp function1.cpp function2.cpp -o hello 

Ключовата дума all се използва за цел и в нов ред поставете същата команда с TAB като по-горе, за да укажете операцията. Запазете файла. Разгледайте файла по-долу:

Linux make команда

За да работите, изпълнете командата, както следва:

е връзка
 make 

Горната команда ще създаде изпълним файл 'hello' от посочените файлове. Помислете за резултата по-долу:

Linux make команда

Нека добавим още няколко задачи към Makefile. Добавяне на задача 'компилирам' както следва:

 all: compile: g++ main.cpp function1.cpp function2.cpp -o hello 

Да изпълни задачата компилирам, изпълнете командата по-долу:

 make compile 

Горната команда ще изпълни задачата за компилиране. Помислете за резултата по-долу:

Linux make команда

Нека изпълним още няколко задачи към нашия makefile.

актуализирайте Makefile, както следва:

 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 

От горния makefile създадохме три обекта като main.o, function1.o и function2.o. Освен това сме предоставили зависимостите за целите main.o, function1.o и function2.o съответно като main.cpp, function1.cpp и function2.cpp. Всички цели ще изпълняват определените задачи в него. Също така сме посочили чиста цел за почистване на всички зависимости и премахване на изпълнимия файл.

Сега изпълнете командата make all, за да изпълните нашия нов makefile.

 make all 

Помислете за резултата по-долу:

Linux make команда

От горния изход можем да видим, че командата първо е изпълнила съответно main.o, function1.o и function2.o. Той ще създаде изпълним файл и файл с обекти на дадените файлове. Няма да изпълни чистата цел, защото не сме я посочили в hello. Разгледайте следните файлове:

Linux make команда

Командата make има ясен работен процес. Той изпълни опцията за всички и отиде на здравей. След изпълнението на hello, той прочита целта в определената последователност. Той претърси всяка цел и нейната зависимост и ги изпълни в последователността.

За да премахнете обектите и изпълнимия файл, изпълнете задачата за почистване. За да изпълните задачата за почистване, изпълнете командата, както следва:

 make clean 

Помислете за резултата по-долу:

Linux make команда

Горната команда ще премахне всички обекти и изпълними файлове. Вижте снимката на директорията по-долу:

Linux make команда

От горното изображение можем да видим, че сме почистили нашата директория.

Променливи в командата make

Можем да дефинираме променливите в нашия makefile. За да дефинирате променливите, използвайте '=' оператор. Например, ако искаме да създадем променлива A и да й присвоим команда gcc, присвоете я като:

екземпляр на в java
 A=g++ 

Използвайте го както следва в нашия makefile:

 hello: hello.cpp ${A} hello.cpp -o hello 

Предава се на терминала като:

 g++ hello.cpp -o hello 

Можем да използваме $(A) вместо ${A}, тъй като и двете се третират еднакво от скрипта.

Коментари в makefile

За да добавите коментар в make-файла, използвайте '#' символ. Например, за да добавите коментар в секцията за компилиране, добавете го като '# Това ще компилира програмата .' Коментарите се игнорират от компилатора.