logo

Linux make -komento

Linux tehdä komentoa käytetään ohjelmien ja tiedostojen ryhmien rakentamiseen ja ylläpitoon lähdekoodista. Linuxissa se on yksi kehittäjien useimmin käyttämistä komennoista. Se auttaa kehittäjiä asentamaan ja kääntämään monia apuohjelmia terminaalista. Lisäksi se hoitaa mittavien projektien kokoamisprosessin. Se säästää kokoamisaikaa.

Make-komennon päämotiivina on jakaa suuri ohjelma osiin ja tarkistaa, pitääkö se kääntää uudelleen vai ei. Se myös antaa tarvittavat käskyt kääntää ne uudelleen.

Tässä osiossa käytämme C++-ohjelmia, koska C++-ohjelmointikieli on oliokieli, mutta voit käyttää mitä tahansa koneellesi asennettua kieltä. Se ei rajoitu vain ohjelmiin; voimme käyttää sitä kuvaamaan myös muita tehtäviä.

Miten make command toimii?

Make-komento ottaa kohteet argumenteiksi. Nämä argumentit määritetään 'Makefile'-kohdassa. Makefile sisältää kohteet sekä niihin liittyvät toiminnot.

Kun suoritamme komennon make, se etsii make-tiedostoa ja skannaa sen löytääkseen kohteen ja käyttääkseen sen riippuvuuksia. Jos riippuvuuksia ei ole määritetty, se etsii riippuvuuden ja rakentaa sen. Se rakentaa pääkohteen riippuvuuksien rakentamisen jälkeen.

Esimerkiksi, jos haluamme muuttaa vain yhtä lähdetiedostoa ja suoritamme komennon make; joten tämä kääntää vain objektitiedoston, joka on yhdistetty kyseiseen lähdetiedostoon. Se säästää paljon aikaa projektin lopullisessa koostamisessa.

Mikä on Makefile?

Make-komento käynnistää makefile-tiedoston. Se on erityinen tiedosto, joka sisältää shell-komennot, jotka luomme projektin ylläpitämiseksi. Makefile sisältää tavoitteita ja komentoja suoritusta varten. Ei saa luoda useampaa kuin yhtä make-tiedostoa. On suositeltavaa luoda sille erillinen hakemisto.

Se pitää kirjaa viimeisimmistä tiedostoista, joten päivitä vain tarvittavat tiedostot. Jos meillä on suuri ohjelma, jossa on useita lähdetiedostoja, meidän on käännettävä uudelleen kaikki riippuvat tiedostot. Joten se voi olla erittäin aikaa vievä prosessi.

Makefile-tiedostossa on luettelo standardeista. Nämä standardit auttavat järjestelmää ymmärtämään, minkä komennon haluamme suorittaa. Nämä standardit ovat kahdessa osassa, ja ne erotetaan uudella rivillä. Ensimmäinen rivi on riippuvuuslinja, ja seuraavat rivit katsotaan toimia tai käskyä s. Komennot erotetaan uudella rivillä sarkaimella.

The riippuvuuksia määritä kunkin tiedoston suhde lähdetiedostoihin. Ja kohde on suoritettava tiedosto, ja se luodaan make-komennon suorittamisen jälkeen.

Vaihtoehdot

Make-komento mahdollistaa erilaisia ​​vaihtoehtoja tarkentamaan sitä. Jotkut tärkeät vaihtoehdot ovat seuraavat:

    -b, -m:Näitä valintoja käytetään jättämään huomioimatta make-komennon eri versioiden yhteensopivuus.-B, --aina-make:Näitä vaihtoehtoja käytetään kaikkien kohteiden asettamiseen ehdoitta.-C dir, --hakemisto=hakemisto:Näitä valintoja käytetään muuttamaan hakemistoa ennen make-tiedoston suorittamista.-d:Sitä käytetään virheenkorjaustietojen tulostamiseen.--debug[=LIPUT]:Sitä käytetään virheenkorjaustietojen tulostamiseen normaalin käsittelyn ohella. Jos ohitamme lipun, se näyttää samanlaisia ​​​​tuloksia kuin '-d'-vaihtoehto.-e, --environment-overrides:Sitä käytetään tarjoamaan muuttujat, jotka on otettu ympäristön ensisijaisuudesta makefile-tiedostoon.-f tiedosto, --file=file, --makefile=TIEDOSTO:Sitä käytetään tiedoston käyttämiseen make-tiedostona.-i, --ohita-virheet:Vaihtoehtoa '-i' käytetään ohittamaan kaikki komentojen virheet.-I dir, --include-dir=dir:Sitä käytetään määrittämään hakemisto määritetyn make-tiedoston etsimiseksi. Jos määritämme monet '-I'-vaihtoehdot, se etsii useista hakemistoista määritetyssä järjestyksessä.-j [työpaikat], --työpaikat[=työpaikat]:Sitä käytetään määrittämään samanaikaisesti suoritettavien töiden lukumäärä. Jos annamme useita '-j'-vaihtoehtoja, viimeinen katsotaan suoritettavaksi. Jos emme määrittele töiden määrää, se ei rajoita samanaikaisesti suoritettavia töitä.-k, --jatka:Sitä käytetään jatkamaan ohjelmaa mahdollisimman paljon virheen jälkeen.-l [kuorma], --kuorma-keskiarvo[=kuorma]:Sitä käytetään määrittämään, että uutta tehtävää ei aloiteta, jos jonossa on muita tehtäviä ja kuormituksen keskiarvo on minimissä.-n, --just-print, --dry-run, --recon:Sitä käytetään ajettavan komennon näyttämiseen.-o tiedosto, --old-file=file, --olettama-old=tiedosto:Sitä käytetään varmistamaan, että merkki ei tee tiedostoa uudelleen, vaikka se olisi vanhempi kuin sen riippuvuudet.-O[tyyppi], --output-sync[=tyyppi]:Sitä käytetään vahvistamaan, että kunkin tehtävän tulos on koottu muiden tehtävien keskenään sekoitettujen tulosten sijaan. Se on hyödyllinen useiden töiden käsittelyyn '-j'-vaihtoehdolla.-p, --print-tietokanta:Sitä käytetään tulostamaan tietokanta, joka tuottaa make-tiedostojen lukemisen jälkeen. On myös hyödyllistä tulostaa versiotiedot, kun sitä käytetään '-v'-vaihtoehdon kanssa. Jos haluat tulostaa tietokannan yrittämättä tehdä tiedostoja uudelleen, suorita komento seuraavasti:
    tee -p -f/dev/null.-q, --kysymys:'-q'-vaihtoehtoa käytetään Kysymystila. Se ei suorita komentoja tai tulosta mitään. Se palauttaa poistumistilan vain nolla, jos määritetty kohde on jo synkronoitu. muuten se näyttää nollasta poikkeavan poistumistilan.-r, --no-builtin-rules:Sitä käytetään poistamaan sisäänrakennettujen implisiittisten sääntöjen käyttö.-R, --no-builtin-variables:Siitä on hyötyä, jos emme halua määritellä mitään sisäänrakennettua muuttujaa.-s, --hiljainen, --hiljainen:Näitä vaihtoehtoja kutsutaan Hiljainen toiminta. Se rajoittaa komentojen tulostamista niitä suoritettaessa.-S, --ei-jatkaa, --lopeta:Sitä käytetään peruuttamaan '-k, --keep-going' -operaation vaikutus.-t, --touch:Sitä käytetään koskettamaan tiedostoja niiden komentojen suorittamisen sijaan.--jäljittää:Sitä käytetään kunkin kohteen sijainnin jäljittämiseen.-v, --versio:Sitä käytetään make-apuohjelman asennetun version tulostamiseen. Lisäksi se näyttää luettelon tekijöistä, tekijänoikeuksista ja jonkinlaisen huomautuksen koskien make-apuohjelmaa.-w, --print-hakemisto:Sitä käytetään työhakemiston sisältävän tulostusviestin seuraamiseen ennen ja jälkeen muun käsittelyn. On hyödyllistä jäljittää virheet rekursiivisen make-komennon monimutkaisesta rakenteesta.--no-print-hakemisto:Sitä käytetään '-w'-vaihtoehdon poistamiseen.-W-tiedosto, --mitä-jos=tiedosto, --uusi-tiedosto=tiedosto, --oleta-uusi=tiedosto:Nämä asetukset olettavat, että kohdetiedostoa on juuri muokattu.--warn-undefined-variables:Tätä vaihtoehtoa käytetään varoittamaan, että määrittelemättömään muuttujaan viitataan.

Ymmärretään joitain esimerkkejä make-komennosta. Näemme makefilen peruskäytön ja lisäksi luomme joitain c++-ohjelmia ja makefile-tiedoston. Suoritamme niille joitain toimintoja ymmärtääksemme make-komennon paremmin.

mikä on rom

Make-komennon peruskäyttö

Ymmärretään make-komennon peruskäyttö, ja se voi auttaa sinua ymmärtämään, miten se toimii.

Luo hakemisto 'projekti' ja vaihda hakemisto siihen. Harkitse seuraavia komentoja:

 mkdir project cd project 

Luo nyt a 'Makefile' jossa on seuraava sisältö ensimmäiselle ohjelmalle:

 say_hello: echo 'Hello World!' 

Yllä olevasta tiedostosta say_hello on kohde, joka käyttäytyy funktiona millä tahansa ohjelmointikielellä, ja kaikua pidetään toimintona. On muistettava, että toiminto tulee kirjoittaa komennolla a TAB. Kohde ja toiminta yhdessä muodostavat säännön makefilelle. Suorita nyt komento make seuraavasti:

Harkitse alla olevaa tulosta:

Linux make -komento

Yllä olevasta lähdöstä voimme nähdä itse kaikutoiminnon olevan näytössä. Jos emme halua näyttää echo-komentoa lähdössä, suorita kaiku alkaen '@' symboli. Voit vaimentaa kaiun päivittämällä makefile-tiedoston sisällön seuraavasti:

 say_hello: @echo 'Hello World!' 

Harkitse alla olevaa tulosta:

Linux make -komento

Kohde voi olla binääritiedosto, joka riippuu toiminnoista.

Lisätään vielä muutama kohde, kuten generointi ja luettelo Makefile. Päivitä makefile seuraavasti:

asetusvalikko android
 say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls 

Jos suoritamme komennon make, se suorittaa vain ensimmäisen kohteen, koska se on make-tiedoston oletuskohde. Harkitse alla olevaa tulosta:

Linux make -komento

Voimme muuttaa oletuskohteen sisällyttämällä alla olevan sisällön make-tiedostoomme:

 .DEFAULT_GOAL := generate 

Lisää se tiedoston ensimmäiselle riville seuraavasti:

Linux make -komento

Yllä oleva makefile pitää 'generate' oletustavoitteena. Suorita make-komento, ja se antaa tulosteen seuraavasti:

Linux make -komento

OLETUSTAVOITTEET -vaihtoehto suorittaa vain yhden kohteen määrittääkseen useamman kuin yhden kohteen kaikkien vaihtoehtojen käyttämiseksi. Jos haluat määrittää useamman kuin yhden kohteen, päivitä make-tiedoston ensimmäinen rivi seuraavasti:

 all: say_hello generate 

Se suorittaa määritetyn kohteen. Harkitse alla olevaa tulosta:

Linux make -komento

On toinenkin vaihtoehto, jonka avulla voimme suorittaa kaikki tavoitteet. Jos haluamme suorittaa kaikki makefile-kohteet, päivitä tiedosto seuraavasti:

 .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 

Yllä oleva tiedosto suorittaa kaikki määritetyt kohteet. Suorita make-komento, harkitse alla olevaa lähtöä:

Linux make -komento

Make-komennon edistynyt käyttö

Luodaan C++-projekti, jossa on tiedostot main.cpp, function1.cpp, function2.cpp ja riippuvuustiedosto function.h.

Tiedostojen koodi on seuraava:

korvaa merkkijonosta javassa

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'; } 

Functions.h:

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

Luo nyt suoritettava tiedosto yllä olevasta projektista suorittamalla alla oleva komento:

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

Yllä oleva komento luo suoritettavan tiedoston 'Hei' tiedostoista main.cpp, function1.cpp ja function2.cpp.

Harkitse alla olevaa tulosta:

Linux make -komento

Yllä olevasta lähdöstä, jos se suoritetaan onnistuneesti, se ei anna tulosta.

Suoritetaan sama tehtävä käyttämällä makefileä.

Luo tiedosto nimellä Makefile ja laita siihen alla oleva koodi.

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

Kohteessa käytetään all-avainsanaa ja laita rivinvaihdossa sama komento TAB:lla kuin yllä määrittääksesi toiminnon. Tallenna tiedosto. Harkitse alla olevaa tiedostoa:

Linux make -komento

Toimiaksesi suorita komento seuraavasti:

tehdä javassa
 make 

Yllä oleva komento luo määritetyistä tiedostoista suoritettavan tiedoston 'hello'. Harkitse alla olevaa tulosta:

Linux make -komento

Lisätään vielä muutama tehtävä Makefileen. Lisää tehtävä 'koota' seuraavasti:

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

Tehtävän suorittamiseen koota, suorita alla oleva komento:

 make compile 

Yllä oleva komento suorittaa käännöstehtävän. Harkitse alla olevaa tulosta:

Linux make -komento

Suoritetaan muita tehtäviä make-tiedostollemme.

päivitä Makefile seuraavasti:

 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 

Yllä olevasta make-tiedostosta olemme luoneet kolme objektia: main.o, function1.o ja function2.o. Lisäksi olemme toimittaneet riippuvuudet kohteille main.o, function1.o ja function2.o vastaavasti main.cpp, function1.cpp ja function2.cpp. Kaikki kohteet suorittavat siinä määritellyt tehtävät. Olemme myös määrittäneet puhtaan kohteen kaikkien riippuvuuksien puhdistamiseksi ja suoritettavan tiedoston poistamiseksi.

Suorita nyt make all -komento suorittaaksesi uuden make-tiedoston.

 make all 

Harkitse alla olevaa tulosta:

Linux make -komento

Yllä olevasta lähdöstä voimme nähdä, että komento suoritti ensin main.o, function1.o ja function2.o. Se luo annetuista tiedostoista suoritettavan ja objektitiedoston. Se ei suorita puhdasta kohdetta, koska emme ole määrittäneet sitä Hellossa. Harkitse alla olevia tiedostoja:

Linux make -komento

Make-komennolla on suoraviivainen työprosessi. Se suoritti kaikki vaihtoehdot ja meni tervehtimään. Hellon suorittamisen jälkeen se luki kohteen määritetyssä järjestyksessä. Se etsi jokaista kohdetta ja sen riippuvuutta ja suoritti ne järjestyksessä.

Poista objektit ja suoritettava tiedosto suorittamalla puhdistustehtävä. Suorita puhdas tehtävä suorittamalla komento seuraavasti:

 make clean 

Harkitse alla olevaa tulosta:

Linux make -komento

Yllä oleva komento poistaa kaikki objektit ja suoritettavat tiedostot. Katso alla oleva ote hakemistosta:

Linux make -komento

Yllä olevasta kuvasta voimme nähdä, että olemme puhdistaneet hakemistomme.

Muuttujat make-komennossa

Voimme määrittää muuttujat make-tiedostossamme. Määritä muuttujat käyttämällä '=' operaattori. Jos esimerkiksi haluamme luoda muuttujan A ja määrittää sille komennon gcc, määritä se seuraavasti:

ero rakkauden ja tykkäämisen välillä
 A=g++ 

Käytä sitä make-tiedostossamme seuraavasti:

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

Se välitetään terminaaliin seuraavasti:

 g++ hello.cpp -o hello 

Voimme käyttää $(A) ${A} sijaan, koska skripti käsittelee molempia samalla tavalla.

Kommentit make-tiedostossa

Voit lisätä kommentin make-tiedostoon käyttämällä '#' symboli. Jos haluat esimerkiksi lisätä kommentin käännösosaan, lisää se nimellä '# Tämä kääntää ohjelman .' Kääntäjä jättää kommentit huomioimatta.