GNU kaubamärk

GNU koostamise õpetus

GNU koostamise õpetus

GNU Make on tööriist, mis aitab lähtekoodist genereerida käivitatavaid programme ja töödelda ka muid projekti allikaväliseid faile. Make saab käivitatavate failide loomise ja muude mitte-lähtefailide töötlemise loogika failist nimega a makefile või a Makefile.

Miks teha?

Marki installimine

Ainult valmistamisest programmide koostamiseks ei piisa. Programmide loomiseks allikast peate oma süsteemi installima kompilaatorid ja muud tööriistad. Niisiis vajame oma eesmärgil täielikku arendusvahendite komplekti.

Linuxi allikate koostamiseks on Debiani-põhistes süsteemides pakett nimega “build-essential” (nt.g. Ubuntu, Linux Mint jne) ning Red Hat'i ja CentOS-i arendustööriistad.

Selle installimiseks Debiani põhistesse süsteemidesse:

apt-get install build-essential

Selle installimiseks CentOSi ja Red Hati käitamisse:

yum groupinstall "Arendustööriistad"

Makefile'iga alustamine

Alustame kirjutades a Tere, Maailm programm C-programmeerimiskeelega.

Meie C-programmi põhifunktsioon asub sees hellomain.c. Faili sisu peaks välja nägema järgmine:

# kaasata  int main () my_fun (); tagastama 0;  

See kood sisaldab päisefaili hellofun.h, mis sisaldab funktsiooni hello_fun () deklaratsiooni. Hellofuni sisu.h on:

void my_fun ();

My_fun () määratlus elab hellofuni sees.c:

# kaasata  # kaasata  void my_fun () printf ("Tere maailm!\ n "); return;

See on väga lihtne programm ja me võiksime selle kompenseerida gcc-ga vaid ühe käsurea abil. Kuid tegeliku elu programmid pole nii lihtsad ja nii väikesed kui see. Asjad lähevad üsna kiiresti keerukaks.  Allpool kirjutan selle tere maailmaprogrammi koostamiseks vajaliku makefile'i skripti. Selgitan selle erinevaid osi järgmistes osades.

hellomain: hellomain.c hellofun.c gcc -o tere hellomain.c hellomain.c-I.

Hoidke seda koodi failis nimega makefile (ilma faililaiendita). Pange fail kataloogi, kus asuvad C-failid. Suunake oma käsurida selles kataloogis. Käsureal kirjutage make ja vajutage sisestusklahvi. Praeguses kataloogis luuakse käivitatav fail nimega tere. Tulemust saate kontrollida käivitades käivitatava faili järgmise käsuga.

./Tere

Väljundid:

Tere, Maailm!

Reeglid, eesmärgid ja sõltuvused

Makefile skript on reeglite kogu. Reeglid annavad juhiseid, kuidas ehitada sihtmärk või väljund allikast või muudest failidest. Reegel täpsustab ka sihtmärgi sõltuvused. Kõigepealt tuleb sõltuvusreeglid täita, sõltuvalt sellest, kas seda on ajatemplit vaadates juba töödeldud. Meie näites makefile ülal on meil reegel, mille sihtmärk on nimetatud hellomain ja selle sõltuvused. Sihtnimi eraldatakse sõltuvuste loendist kooloniga. Käivitatavad shellikäsklused on loetletud järgmisel real. Shelli käsud peavad algama tabulaatori märgiga.

Kui te ei määra parameetriga käsku make, käivitatakse esimene sihtmärk. Meie näites ei täpsustanud me ühtegi parameetrit ja meil oli hellomain esimese ja ainsa sihtmärgina.

Muutujad

Muutuja on suurepärane viis väärtuse ühekordseks kirjutamiseks ja arvukaks kasutamiseks, kordamata väärtust uuesti ja uuesti. See aitab meil hoida oma koodi KUIV (Ära korda ennast). Kui peate kunagi kogu skripti väärtust muutma, peate lihtsalt muutma seda ühes kohas, et kajastada muutust kõikjal, kui kasutate muutujat.

Meie näites kasutasime gcc kompilaatorina, kuid võib-olla peame kompilaatori millekski muuks muutma. Niisiis saame kompilaatori nime muutujana hoida. Samuti võime kompilaatori lippe hoida teises muutujas, et seda uuesti kasutada. Muutujale väärtuse määramiseks kasutame võrdusmärki (=) ja selle muutuja lugemiseks kasutame $ (muutuja_nimi).

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

Keskkonna puhastamine

Võimalik, et peame oma keskkonda puhastama. Kui tahame, et iga meie projekti tükk ehitataks nullist üles, peame selle puhastama. Meie lihtsas näites on ainus loodud fail fail Tere käivitatav. Käsitsi kustutamata saame selle kustutada make-ga. Nii saame selle jaoks luua reegli ja nimetada sihtmärgi nimeks puhas.

CC = gcc CFLAGS = -I. hellomain: hellomain.c hellofun.c $ (CC) -o tere hellomain.c hellomain.c $ (CFLAGS) puhas: rm tere

Puhta sihtmärgi shellikäsk on lihtsalt vanaaegne shellikäsk rm. Nüüd käivitage käsurealt:

puhtaks tegema

Vaadake praegust kataloogi, et näha, et Tere käivitatav fail on kadunud.

Näite laiendamine rohkemate probleemide lahendamiseks

Meie lihtsas tere maailma koostamise näites on meil probleem, mida me pole veel lahendanud. hellomain siht vaatab hellomian.c ja hellofun.c failide ajatemplid järgmisel korral, kui proovite seda uuesti kompileerida tegema või tee hellomain. Nii et kui muudate mõnda neist kahest failist, kompileeritakse need uuesti. Aga kui muudad hellofun.h siis see ei kompileeru. See on ootamatu!

Jällegi oleme vahele jätnud keskmise taseme. Me ei genereerinud objektifaile ja lõime otse käivitatava faili. Stseeni taga luuakse objektifailid ajutises kataloogis ja kustutatakse. Enne käivitatava faili loomist tahame luua objektifailid. Seekord nimetame peamiseks sihtmärgiks kõik

kõik: hellomain.o hellofun.o gcc hellomain.o hellofun.o-tere hellomain.o: hellomain.c hellofun.h gcc -I. -c hellomain.c hellofun.o: hellofun.c hellofun.h gcc -I. -c hellofun.c puhas: rm -rf *.o rm tere

Käivitage käsk make uuesti, et näha, kas teie programm ehitab edukalt või mitte. Tulemuse kontrollimiseks käivitage hello käivitatav fail. Vaadake praegust kataloogi ja näete, et objektifailid on loodud. Objektifailide puhastamiseks oleme puhta sihtmärgi juurde lisanud veel ühe rea. See makefile'i skript aitab tere maailma programmi uuesti kompileerida isegi siis, kui hellofun.h fail on muudetud.

Järeldus

Make on Linuxi kasutajate ja programmeerijate jaoks üks olulisemaid tööriistu. Kui olete lõppkasutaja, aitavad teadmised valmistamisest teil Linuxi maailmas palju katkisi asju lahendada. Kui olete programmeerija, ei saa te lihtsalt koodi kirjutades minema minna ja lasta oma kasutajatel välja mõelda, kuidas see lähtekood käivitatavatesse failidesse kompileerida. Lõppkasutajatele peate looma makefile'i skripti, et nad ei mängiks teie allika käivitatavatesse failidesse komponeerimiseks mõnda arvamismängu.

Viited

GNUMake projekti koduleht
GNU Tee dokumentatsioon

Kuidas kasutada AutoKeyt Linuxi mängude automatiseerimiseks
AutoKey on Linuxi ja X11 töölaua automatiseerimise utiliit, mis on programmeeritud Python 3, GTK ja Qt. Selle skriptimise ja MACRO funktsionaalsuse ab...
Kuidas näidata FPS-loendurit Linuxi mängudes
Linuxi mängimine sai suure tõuke, kui Valve teatas Steam-kliendi ja nende mängude Linuxi toest 2012. aastal. Sellest ajast peale on paljud AAA- ja ind...
Sid Meieri Civilization VI allalaadimine ja mängimine Linuxis
Sissejuhatus mängu Civilization 6 on kaasaegne kontseptsioon, mis tutvustati Age of Empires mängude sarjas. Idee oli üsna lihtne; alustaksite kõige põ...