GNU gamintojas

GNU Padaryti pamoka

GNU Padaryti pamoka

„GNU Make“ yra įrankis, padedantis generuoti vykdomas programas iš šaltinio kodo ir apdoroti kitus ne šaltinio failus iš projekto. „Make“ gauna vykdomųjų failų kūrimo ir kitų šaltinio failų apdorojimo iš failo, vadinamo a logiką makefile arba a „Makefile“.

Kodėl verta?

„Make“ diegimas

Norint sukurti programas, nepakanka vien gaminti. Norint kurti programas iš šaltinio, jūsų sistemoje turi būti įdiegti kompiliatoriai ir kiti įrankiai. Taigi, mums reikalingas visas kūrimo įrankių rinkinys.

Norėdami kompiliuoti šaltinius „Linux“, Debian'o sistemose yra paketas, vadinamas „build-essential“ (pvz., „Build-essential“).g. „Ubuntu“, „Linux Mint“ ir kt.) Ir „Kūrimo įrankiai“ „Red Hat“ ir „CentOS“.

Norėdami tai įdiegti sistemose „Debian“:

„apt-get install build-essential“

Norėdami tai įdiegti „CentOS“ ir „Red Hat“ paleisti:

yum groupinstall „Kūrimo įrankiai“

Darbo su „Makefile“ pradžia

Pradėkime rašydami a Labas pasauli programa su C programavimo kalba.

Pagrindinė mūsų C programos funkcija bus viduje pragaras.c. Failo turinys turėtų atrodyti taip:

# įtraukti  int main () my_fun (); grąžinti 0;  

Šis kodas apima antraštės failą hellofun.h, kuriame yra funkcijos pavadinimu hello_fun () deklaracija. „Hellofun“ turinys.h yra:

anuliuoti my_fun ();

My_fun () apibrėžimas gyvena hellofun viduje.c:

# įtraukti  # įtraukti  void my_fun () printf ("Sveikas pasaulis!\ n "); grąžinti;

Tai labai paprasta programa, kurią galėtume sukompiliuoti naudodami gcc tik su viena komandų eilute. Tačiau realaus gyvenimo programos nėra tokios paprastos ir tokios mažos. Viskas greitai tampa sudėtinga.  Žemiau aš parašysiu reikiamą makefile scenarijų, kad galėčiau sudaryti šią „Hello World“ programą. Kitose dalyse paaiškinsiu skirtingas jo dalis.

hellomain: hellomain.c hellofun.c gcc -o labas hellomain.c pragaras.c-Aš.

Laikykite šį kodą faile, pavadintame makefile (be failo plėtinio). Įdėkite failą į katalogą, kuriame yra C failai. Šiame kataloge nukreipkite komandinę eilutę. Komandinėje eilutėje parašykite „make“ ir paspauskite „Enter“. Dabartiniame kataloge bus sukurtas vykdomasis failas, vadinamas labas. Rezultatą galite patikrinti vykdydami vykdomąjį failą naudodami šią komandą.

./Sveiki

Išėjimai:

Labas pasauli!

Taisyklės, tikslai ir priklausomybės

Makefile scenarijus yra taisyklių rinkinys. Taisyklės nurodo, kaip sukurti tikslą arba išvestį iš šaltinio ar kitų failų. Taisyklė taip pat nurodo taikinio priklausomybę. Pirmiausia reikia vykdyti priklausomybės taisykles, atsižvelgiant į tai, ar tai jau apdorota, žiūrint į laiko žymas. Mūsų pavyzdyje makefile aukščiau, mes turime taisyklę su taikiniu, pavadintu pragaras ir jo priklausomybės. Taikinio vardas yra atskiriamas dvitaškiu iš priklausomybės sąrašo. „Shell“ komandos, kurios bus vykdomos, yra išvardytos šioje eilutėje. Korpuso komandos turi prasidėti tabuliavimo ženklu.

Jei komandoje make nenurodysite jokio parametro, bus įvykdytas pirmasis taikinys. Mūsų pavyzdyje nenurodėme jokio parametro ir turėjome pragaras kaip pirmasis ir vienintelis taikinys.

Kintamieji

Kintamasis yra puikus būdas vieną kartą parašyti vertę ir naudoti jas daugybę kartų, pakartojant vertę dar ne kartą. Tai padeda mums išsaugoti savo kodą DRY (nekartokite savęs). Jei kada nors reikia pakeisti tam tikrą viso scenarijaus vertę, tiesiog reikia pakeisti tai vienoje vietoje, kad atspindėtumėte pokyčius visur, jei naudojate kintamąjį.

Savo pavyzdyje mes panaudojome gcc kaip kompiliatorius, bet mums gali tekti pakeisti kompiliatorių į kažką kitą. Taigi, kompiliatoriaus vardą galime laikyti kintamajame. Be to, kompiliatoriaus vėliavas galime laikyti kitame kintamajame, kad galėtume tai pakartotinai naudoti. Norėdami nustatyti kintamojo vertę, mes naudojame lygybės ženklą (=) ir norėdami perskaityti tą kintamąjį, mes naudojame $ (kintamo_pavadinimas).

CC = gcc CFLAGS = -I. hellomain: hellomain.c hellofun.c $ (CC) -o labas hellomain.c pragaras.c $ (CFLAGS)

Aplinkos valymas

Mums dažnai gali tekti valyti aplinką. Jei norime, kad kiekvienas mūsų projekto kūrinys būtų atstatytas nuo nulio, turime jį išvalyti. Mūsų paprastame pavyzdyje vienintelis sugeneruotas failas yra Sveiki vykdomas. Neištrindami to rankiniu būdu, galime tai ištrinti naudodami „make“. Taigi, mes galime sukurti tam taisyklę ir įvardyti tikslą kaip švarus.

CC = gcc CFLAGS = -I. hellomain: hellomain.c hellofun.c $ (CC) -o labas hellomain.c pragaras.c $ (CFLAGS) švarus: rm labas

„Shell“ komanda „clean target“ yra tik sena „shell“ komanda rm. Dabar iš komandinės eilutės vykdykite:

padaryti švarų

Pažvelkite į dabartinį katalogą, kad pamatytumėte, jog Sveiki vykdomojo failo nebėra.

Išplėsdami mūsų pavyzdį, kad išspręstume daugiau problemų

Savo paprastame „labo pasaulio“ kompiliavimo pavyzdyje turime problemą, kurios dar neišsprendėme. pragaras taikinys žiūri hellomianas.c ir pragaras.c failų laiko žymos, kai kitą kartą bandysite jį sukompiliuoti padaryti arba padaryti pragarą. Taigi, jei pakeisite bet kurį iš šių dviejų failų, jie bus perkompiliuoti. Bet, jei pasikeisite pragaras.h tada jis nebus kompiliuojamas. Tai netikėta!

Vėlgi, mes praleidome tarpinį lygį. Mes negeneravome objekto failų ir tiesiogiai sugeneravome vykdomąjį failą. Tačiau užkulisyje objekto failai sukuriami laikinajame kataloge ir ištrinami. Prieš kurdami vykdomąjį failą, norime sugeneruoti objekto failus. Šį kartą pagrindinį taikinį įvardijame kaip visi

visi: hellomain.o pragaras.o gcc hellomain.o pragaras.o-sveiki hellomainai.o: hellomain.c hellofun.h gcc -I. -c pragaras.c hellofun.o: hellofun.c hellofun.h gcc -I. -c hellofun.c švarus: rm -rf *.o rm labas

Dar kartą paleiskite komandą make, kad sužinotumėte, ar jūsų programa sėkmingai sukurta, ar ne. Norėdami patikrinti rezultatą, paleiskite „Hello“ vykdomąjį failą. Pažvelkite į dabartinį katalogą ir pamatysite, kad objektų failai yra sukurti. Mes pridėjome dar vieną eilutę prie švaraus tikslo, kad išvalytume objektų failus. Šis makefile scenarijus padės iš naujo sukompiliuoti „Hello world“ programą, net jei pragaras.h failas pakeistas.

Išvada

„Make“ yra viena iš svarbiausių „Linux“ vartotojų ir programuotojų priemonių. Jei esate galutinis vartotojas, žinojimas apie „make“ padės jums išspręsti daugelį sugadintų dalykų jūsų „Linux“ pasaulyje. Jei esate programuotojas, tiesiog negalite nueiti rašydami kodą ir leiskite savo vartotojams suprasti, kaip sukompiliuoti tą šaltinio kodą vykdomiesiems failams. Galutiniams vartotojams turite sukurti makefile scenarijų, kad jie nežaistų tam tikro spėjimo žaidimo ir sukompiliuotų jūsų šaltinį į vykdomuosius.

Literatūra

Pagrindinis „GNUMake“ projekto puslapis
GNU Padaryti dokumentaciją

„AppyMouse“ ekrano „Trackpad“ ir pelės žymeklis, skirtas „Windows“ tabletėms
Planšetinių kompiuterių vartotojai dažnai praleidžia pelės žymeklį, ypač kai įprasta naudoti nešiojamus kompiuterius. Jutiklinio ekrano išmanieji tele...
Vidutinis pelės mygtukas neveikia sistemoje „Windows 10“
The vidurinis pelės mygtukas padeda naršyti ilgus tinklalapius ir ekranus, kuriuose yra daug duomenų. Jei tai sustos, gerai, jūs naudosite klaviatūrą ...
Kaip pakeisti kairįjį ir dešinįjį pelės mygtukus „Windows 10“ kompiuteryje
Gana įprasta, kad visi kompiuterio pelės įrenginiai yra ergonomiškai sukurti dešiniarankiams. Tačiau yra pelių prietaisų, specialiai sukurtų kairiaran...