„Linux“. padaryti komanda naudojama programų ir failų grupėms kurti ir prižiūrėti iš šaltinio kodo. „Linux“ sistemoje tai yra viena iš dažniausiai kūrėjų naudojamų komandų. Tai padeda kūrėjams iš terminalo įdiegti ir kompiliuoti daugybę paslaugų. Be to, ji tvarko didelių projektų sudarymo procesą. Tai taupo kompiliavimo laiką.
Pagrindinis komandos make motyvas yra suskirstyti didelę programą į dalis ir patikrinti, ar ją reikia perkompiliuoti, ar ne. Be to, ji išduoda reikalingus įsakymus, kad juos perkompiliuotų.
Šiame skyriuje naudosime C++ programas, nes C++ programavimo kalba yra į objektą orientuota kalba, tačiau galite naudoti bet kurią jūsų kompiuteryje įdiegtą kalbą. Tai neapsiriboja tik programomis; galime naudoti jį apibūdindami ir kitas užduotis.
Kaip veikia komandų sudarymas?
Komanda make priima taikinius kaip argumentus. Šie argumentai nurodyti „Makefile“. Makefile yra tikslai ir susiję veiksmai, susiję su šiais tikslais.
Kai vykdome komandą make, ji ieško makefile ir nuskaito jį, kad surastų tikslą ir pasiektų jo priklausomybes. Jei priklausomybės nenurodytos, ji ieškos priklausomybės ir ją sukurs. Sukūrus priklausomybes, bus sukurtas pagrindinis tikslas.
Pavyzdžiui, jei norime pakeisti tik vieną šaltinio failą ir vykdome komandą make; taigi bus kompiliuojamas tik su tuo šaltinio failu susietas objekto failas. Tai sutaupys daug laiko galutinai rengiant projektą.
Kas yra Makefile?
Komanda make iškviečia makefile vykdymą. Tai specialus failas, kuriame yra apvalkalo komandos, kurias sukuriame projektui palaikyti. Makefile yra vykdymo tikslai ir komandos. Neleidžiama kurti daugiau nei vieno makefilo. Jai rekomenduojama sukurti atskirą katalogą.
Ji seka naujausius failus, todėl atnaujinkite tik tuos failus, kurių reikia. Jei turime didelę programą su daug šaltinio failų, turime iš naujo sukompiliuoti visus priklausomus failus. Taigi, tai gali būti labai daug laiko reikalaujantis procesas.
Makefile yra standartų sąrašas. Šie standartai padeda sistemai suprasti, kokią komandą norime vykdyti. Šie standartai yra sudaryti iš dviejų dalių ir atskirti nauja eilute. Pirmoji eilutė yra priklausomybės linija, o tolesnės eilutės laikomos veiksmus ar komandą s. Komandos naujoje eilutėje yra atskirtos skirtuku.
The priklausomybės nurodykite kiekvieno failo ryšį su šaltinio failais. Ir taikinys yra vykdomasis failas ir sukuriamas įvykdžius komandą make.
Galimybės
Komanda make palengvina įvairias parinktis, kad ji būtų konkretesnė. Kai kurios svarbios parinktys yra šios:
padaryti -p -f/dev/null.
Supraskime kelis komandos make pavyzdžius. Pamatysime pagrindinį makefile naudojimą, o toliau sukursime keletą c++ programų ir makefile. Su jais atliksime kai kurias operacijas, kad geriau suprastume komandą make.
latekso sąrašai
Pagrindinis make komandos naudojimas
Supraskime pagrindinį make komandos naudojimą ir tai gali padėti suprasti, kaip ji veikia.
java apdailos eilutė
Sukurkite katalogą „projektas“ ir pakeiskite katalogą į jį. Apsvarstykite toliau pateiktas komandas:
mkdir project cd project
Dabar sukurkite a 'Makefile' turintis tokį pirmosios programos turinį:
say_hello: echo 'Hello World!'
Aukščiau pateiktame faile sako_hello yra taikinys, kuris bet kurioje programavimo kalboje veikia kaip funkcija, o aidas bus laikomas veiksmu. Reikia atsiminti, kad veiksmas turi būti parašytas naudojant a TAB. Tikslas ir veiksmas kartu sukuria makefile taisyklę. Dabar vykdykite komandą make taip:
Apsvarstykite toliau pateiktą išvestį:
Iš aukščiau pateiktos išvesties matome, kaip rodoma pati aido operacija. Jei nenorime, kad išvestyje būtų rodoma echo komanda, vykdykite aidą, pradedant nuo '@' simbolis. Norėdami nuslopinti aidą, atnaujinkite makefile turinį taip:
say_hello: @echo 'Hello World!'
Apsvarstykite toliau pateiktą išvestį:
Tikslas gali būti dvejetainis failas, priklausantis nuo veiksmų.
Pridėkime dar keletą taikinių, pvz., generuoti ir įtraukti į makefile sąrašą. Atnaujinkite make-file taip:
say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Jei vykdome komandą make, ji vykdo tik pirmąjį tikslą, nes tai yra numatytasis makefile tikslas. Apsvarstykite toliau pateiktą išvestį:
Galime pakeisti numatytąjį tikslą įtraukdami toliau pateiktą turinį į savo maketą:
.DEFAULT_GOAL := generate
Pridėkite jį prie pirmosios failo eilutės taip:
Aukščiau pateiktame makefile numatytasis tikslas bus „generuoti“. Vykdykite komandą make ir ji pateiks išvestį taip:
Parinktis NUMATYTOJI TIKSLAS vykdys tik vieną tikslą ir nurodys daugiau nei vieną tikslą, kad būtų naudojamos visos parinktys. Norėdami nurodyti daugiau nei vieną tikslą, atnaujinkite pirmąją makefile eilutę taip:
all: say_hello generate
Jis vykdys nurodytą tikslą. Apsvarstykite toliau pateiktą išvestį:
Yra dar viena galimybė, leidžianti įvykdyti visus tikslus. Jei norime vykdyti visus makefile tikslus, atnaujinkite failą taip:
.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
Aukščiau pateiktas failas atliks visus nurodytus tikslus. Vykdykite komandą make, apsvarstykite toliau pateiktą išvestį:
Išplėstinis make komandos naudojimas
Sukurkime C++ projektą su failais main.cpp, function1.cpp, function2.cpp ir priklausomybės failą function.h.
Failų kodas yra toks:
kurtinys vs barsukas
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; }
function1.cpp:
#include 'functions.h' int factorial(int n) { if(n!=1) { return (n * factorial(n-1)); } else return 1; }
function2.cpp:
#include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; }
Funkcijos.h:
void print_hello(); int factorial (int n);
Dabar sukurkite aukščiau pateikto projekto vykdomąjį failą vykdydami toliau pateiktą komandą:
g++ main.cpp function1.cpp function2.cpp -o hello
Aukščiau pateikta komanda sukurs vykdomąjį failą 'Sveiki' iš failų main.cpp, function1.cpp ir function2.cpp.
Apsvarstykite toliau pateiktą išvestį:
Iš aukščiau pateiktos išvesties, jei ji bus sėkmingai įvykdyta, ji neduos jokios išvesties.
Atlikime tą pačią užduotį naudodami makefile.
Sukurkite failą kaip Makefile ir įdėkite žemiau esantį kodą.
all: g++ main.cpp function1.cpp function2.cpp -o hello
Raktinis žodis „all“ naudojamas tikslinei ir naujoje eilutėje įveskite tą pačią komandą su TAB, kaip nurodyta aukščiau, kad nurodytumėte operaciją. Išsaugokite failą. Apsvarstykite toliau pateiktą failą:
Norėdami dirbti, vykdykite komandą taip:
sąrašas ir nustatytas java
make
Aukščiau pateikta komanda sukurs vykdomąjį failą „labas“ iš nurodytų failų. Apsvarstykite toliau pateiktą išvestį:
Prie Makefile pridėkime dar keletą užduočių. Pridėti užduotį 'kompiliuoti' taip:
all: compile: g++ main.cpp function1.cpp function2.cpp -o hello
Norėdami atlikti užduotį kompiliuoti, vykdykite žemiau esančią komandą:
make compile
Aukščiau pateikta komanda vykdys kompiliavimo užduotį. Apsvarstykite toliau pateiktą išvestį:
Atlikime dar keletą užduočių su mūsų makefile.
atnaujinkite Makefile taip:
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
Iš aukščiau pateikto makefile sukūrėme tris objektus kaip main.o, function1.o ir function2.o. Be to, mes pateikėme taikinių main.o, function1.o ir function2.o priklausomybes atitinkamai kaip main.cpp, function1.cpp ir function2.cpp. Visi taikiniai jame atliks nurodytas užduotis. Taip pat nurodėme švarų tikslą, kad išvalytume visas priklausomybes ir pašalintume vykdomąjį failą.
Dabar vykdykite komandą make all, kad paleistumėte naująjį makefile.
make all
Apsvarstykite toliau pateiktą išvestį:
Iš aukščiau pateiktos išvesties matome, kad komanda pirmiausia įvykdė main.o, function1.o ir function2.o atitinkamai. Jis sukurs nurodytų failų vykdomąjį ir objektų failą. Jis nevykdys švaraus tikslo, nes mes jo nenurodėme sveiki. Apsvarstykite toliau pateiktus failus:
Komanda make turi tiesioginį darbo procesą. Jis įvykdė visas parinktis ir nuėjo į labas. Po „hello“ vykdymo jis perskaitė tikslą nurodyta seka. Jis ieškojo kiekvieno taikinio ir jo priklausomybės ir įvykdė juos iš eilės.
Norėdami pašalinti objektus ir vykdomąjį failą, atlikite švarią užduotį. Norėdami atlikti švarią užduotį, vykdykite komandą taip:
make clean
Apsvarstykite toliau pateiktą išvestį:
Aukščiau pateikta komanda pašalins visus objektus ir vykdomuosius failus. Žiūrėkite žemiau esantį katalogo fragmentą:
Iš aukščiau esančio vaizdo matome, kad išvalėme savo katalogą.
Kintamieji komandoje make
Mes galime apibrėžti kintamuosius savo makefile. Norėdami apibrėžti kintamuosius, naudokite '=' operatorius. Pavyzdžiui, jei norime sukurti kintamąjį A ir priskirti jam komandą gcc, priskirkite jį kaip:
pagrindinė java kalba
A=g++
Naudokite jį mūsų makefile taip:
hello: hello.cpp ${A} hello.cpp -o hello
Jis perduodamas terminalui taip:
g++ hello.cpp -o hello
Vietoj ${A} galime naudoti $(A), nes scenarijus abu traktuojami vienodai.
Komentarai makefile
Norėdami pridėti komentarą į makefile, naudokite '#' simbolis. Pavyzdžiui, norėdami pridėti komentarą kompiliavimo skiltyje, pridėkite jį kaip '# Tai sukompiliuos programą .' Kompiliatorius nepaiso komentarų.