GNU Make

Výukový program pre GNU

Výukový program pre GNU

GNU Make je nástroj, ktorý pomáha generovať spustiteľné programy zo zdrojového kódu a tiež spracovávať ďalšie súbory, ktoré nie sú z projektu zdrojové. Make získa logiku zostavenia spustiteľných súborov a spracovania ďalších súborov, ktoré nie sú zdrojmi, zo súboru s názvom a makefile alebo a Makefile.

Prečo robiť?

Inštaluje sa značka

Samotné vytváranie nestačí na tvorbu programov. Ak chcete vytvárať programy zo zdroja, musíte mať vo svojom systéme nainštalované kompilátory a ďalšie nástroje. Pre náš účel teda potrebujeme celú sadu vývojových nástrojov.

Na kompiláciu zdrojov v systéme Linux existuje balík s názvom „build-essential“ v systémoch založených na Debiane (napr.g. Ubuntu, Linux Mint atď.) A „Vývojové nástroje“ na Red Hat a CentOS.

Ak to chcete nainštalovať na systémy založené na Debiane:

apt-get install build-essential

Ak to chcete nainštalovať na serveroch CentOS a Red Hat, postupujte takto:

yum groupinstall "Vývojové nástroje"

Začíname s Makefile

Začnime tým, že napíšeme a ahoj svet program s programovacím jazykom C.

Hlavná funkcia nášho programu C bude spočívať vo vnútri hellomain.c. Obsah súboru by mal vyzerať takto:

#include  int main () my_fun (); návrat 0;  

Tento kód obsahuje hlavičkový súbor hellofun.h, ktorý obsahuje deklaráciu funkcie s názvom hello_fun (). Obsah hellofun.jeho:

void my_fun ();

Definícia my_fun () žije vo vnútri hellofun.c:

#include  #include  void my_fun () printf ("Hello World!\ n "); návrat;

Toto je veľmi jednoduchý program a mohli by sme ho skompilovať pomocou gcc iba s jedným príkazovým riadkom. Programy v skutočnom živote však nie sú také jednoduché a také malé. Veci sa skomplikujú naozaj skoro.  Ďalej napíšem potrebný skript makefile na zostavenie tohto programu hello world. V ďalších častiach vysvetlím rôzne jeho časti.

hellomain: hellomain.c ahojfun.c gcc -o ahoj hellomain.c hellomain.c -I.

Tento kód uložte do súboru s názvom makefile (bez akejkoľvek prípony súboru). Vložte súbor do adresára, kde sú súbory C. Namierte príkazový riadok do tohto adresára. Na príkazový riadok napíšte značka a stlačte kláves Enter. V aktuálnom adresári sa vygeneruje spustiteľný súbor s názvom ahoj. Výsledok môžete overiť spustením spustiteľného súboru pomocou nasledujúceho príkazu.

./Ahoj

Výstupy:

Ahoj svet!

Pravidlá, ciele a závislosti

Skript makefile je zbierka pravidiel. Pravidlá dávajú pokyn Vytvoriť, ako vytvoriť cieľ alebo výstup zo zdrojových alebo iných súborov. Pravidlo tiež určuje závislosti cieľa. Pravidlá závislostí sa musia najskôr vykonať v závislosti od toho, či už sú tieto údaje spracované pri pohľade na časové pečiatky. V našom príklade makefile vyššie máme pravidlo s pomenovaným cieľom hellomain a jeho závislosti. Cieľový názov je v zozname závislostí oddelený dvojbodkou. Príkazy shellu, ktoré sa vykonajú, sú uvedené v nasledujúcom riadku. Príkazy shellu musia začínať znakom tabulátora.

Ak neurčíte žiadny parameter príkazom make, vykoná sa prvý cieľ. V našom príklade sme neurčili žiadny parameter a mali sme hellomain ako prvý a jediný cieľ.

Premenné

Variabilné sú skvelým spôsobom, ako jednorazovo zapísať hodnotu a použiť ich opakovane bez opakovania hodnoty. Pomáha nám udržať náš kód SUCHÝ (neopakujte sa). Ak niekedy potrebujete zmeniť nejakú hodnotu v celom skripte, musíte ju zmeniť na jednom mieste, aby odrážala zmenu všade, ak používate premennú.

V našom príklade sme použili gcc ako kompilátor, ale možno budeme musieť kompilátor zmeniť na niečo iné. Názov kompilátora teda môžeme ponechať v premennej. Môžeme tiež ponechať príznaky kompilátora v inej premennej, aby sme ich mohli znova použiť. Na nastavenie hodnoty do premennej používame znamienko rovnosti (=) a na čítanie tejto premennej použijeme $ (variable_name).

CC = gcc CFLAGS = -I. hellomain: hellomain.c ahojfun.c $ (CC) -o ahoj hellomain.c hellomain.c $ (CFLAGS)

Čistenie životného prostredia

Možno budeme musieť niekedy vyčistiť svoje životné prostredie. Ak chceme, aby bol každý kúsok nášho projektu prestavaný úplne od nuly, musíme ho vyčistiť. V našom jednoduchom príklade je jediný vygenerovaný súbor Ahoj spustiteľný. Bez toho, aby sme to ručne vymazali, to môžeme vymazať pomocou make. Môžeme pre to vytvoriť pravidlo a pomenovať cieľ ako čistý.

CC = gcc CFLAGS = -I. hellomain: hellomain.c ahojfun.c $ (CC) -o ahoj hellomain.c hellomain.c $ (CFLAGS) clean: rm ahoj

Príkaz shellu v čistom cieli je iba odveký príkaz shellu rm. Teraz z príkazového riadku vykonajte:

urobiť čisté

Pozrite sa na aktuálny adresár a zistite, či Ahoj spustiteľný súbor je preč.

Rozšírenie nášho príkladu na riešenie ďalších problémov

V našom jednoduchom príklade kompilácie hello world máme problém, ktorý sme ešte nevyriešili. hellomain terč sa pozerá na hellomian.c a ahoj zábava.c časové pečiatky súborov, keď ich nabudúce skúsite prekompilovať urobiť alebo urobiť hellomain. Ak teda zmeníte ktorýkoľvek z týchto dvoch súborov, znova sa skompiluje. Ale ak sa zmeníte ahoj zábava.h potom sa to nebude prekompilovať. To je nečakané!

Opäť sme preskočili strednú úroveň. Nevygenerovali sme súbory objektov a priamo vygenerovali spustiteľný súbor. Za scénou sú však súbory objektov vytvorené v dočasnom adresári a odstránené. Pred zostavením spustiteľného súboru chceme vygenerovať súbory objektov. Tentokrát pomenujeme hlavný cieľ ako všetko

všetci: hellomain.o ahojfun.o gcc hellomain.o ahojfun.o -o ahoj hellomain.o: hellomain.c ahojfun.h gcc -I. -c hellomain.c ahojfun.o: ahojfun.c ahojfun.h gcc -I. -c ahojfun.c clean: rm -rf *.o rm ahoj

Znova spustite príkaz make, aby ste zistili, či sa váš program zostavuje úspešne alebo nie. Spustite ahoj spustiteľný súbor na overenie výsledku. Pozrite sa na aktuálny adresár a uvidíte, že sa vytvárajú súbory objektov. Do čistého cieľa sme pridali ešte jeden riadok na vyčistenie súborov objektov. Tento skript makefile pomôže prekompilovať svetový program ahoj, aj keď ahoj zábava.h súbor je upravený.

Záver

Make je jedným z najdôležitejších nástrojov pre používateľov linuxu a programátorov. Ak ste koncovým používateľom, znalosť značky vám pomôže vyriešiť veľa rozbitých vecí vo vašom svete linuxu. Ak ste programátor, nemôžete jednoducho odísť napísaním kódu a nechať svojich používateľov prísť na to, ako kompilovať tento zdrojový kód do spustiteľných súborov. Musíte vytvoriť skript makefile pre koncových používateľov, aby nehrali nejakú hru na hádanie, aby skompilovali váš zdroj do spustiteľných súborov.

Referencie

Domovská stránka projektu GNUMake
GNU Vytvorte dokumentáciu

Hry Výukový program OpenTTD
Výukový program OpenTTD
OpenTTD je jednou z najpopulárnejších obchodných simulačných hier. V tejto hre musíte vytvoriť úžasné dopravné podnikanie. Začnete však na začiatku ok...
Hry SuperTuxKart pre Linux
SuperTuxKart pre Linux
SuperTuxKart je vynikajúci titul navrhnutý tak, aby vám priniesol zážitok z hry Mario Kart zadarmo na vašom systéme Linux. Je to dosť náročné a zábavn...
Hry Výukový program Battle for Wesnoth
Výukový program Battle for Wesnoth
Battle for Wesnoth je jednou z najpopulárnejších open source strategických hier, ktoré si v súčasnosti môžete zahrať. Táto hra bola nielen vyvinutá ve...