GNU Make

Výukový program GNU Make

Výukový program GNU Make

GNU Make je nástroj, který pomáhá generovat spustitelné programy ze zdrojového kódu a také zpracovávat další non-zdrojové soubory z projektu. Make získá logiku sestavení spustitelných souborů a zpracování dalších nesource souborů ze souboru s názvem a makefile nebo a Makefile.

Proč dělat?

Instalace značky

Samotné vytváření nestačí k vytváření programů. Chcete-li vytvářet programy ze zdroje, musíte mít ve svém systému nainstalované kompilátory a další nástroje. Pro náš účel tedy potřebujeme celou sadu vývojových nástrojů.

Ke kompilaci zdrojů v systému Linux existuje balíček nazvaný „build-essential“ v systémech založených na Debianu (např.G. Ubuntu, Linux Mint atd.) A „Vývojové nástroje“ na Red Hat a CentOS.

Chcete-li to nainstalovat na systémy založené na Debianu:

apt-get install build-essential

Chcete-li toto nainstalovat na CentOS a Red Hat, postupujte takto:

yum groupinstall "Vývojové nástroje"

Začínáme s Makefile

Začněme tím, že napíšeme a Ahoj světe program s programovacím jazykem C.

Hlavní funkce našeho programu C bude uvnitř hellomain.C. Obsah souboru by měl vypadat takto:

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

Tento kód obsahuje záhlaví souboru hellofun.h, který obsahuje deklaraci funkce s názvem hello_fun (). Obsah hellofun.jeho:

void my_fun ();

Definice my_fun () žije uvnitř hellofun.C:

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

Jedná se o velmi jednoduchý program a mohli bychom jej zkompilovat pomocí gcc pouze s jedním příkazovým řádkem. Programy v reálném životě však nejsou tak jednoduché a tak malé. Věci se začnou komplikovat opravdu brzy.  Níže budu psát potřebný skript makefile pro kompilaci tohoto programu hello world. V následujících částech vysvětlím jeho různé části.

hellomain: hellomain.c ahoj zábava.c gcc -o ahoj hellomain.c hellomain.c -I.

Udržujte tento kód v souboru zvaném makefile (bez jakékoli přípony souboru). Vložte soubor do adresáře, kde jsou soubory C. Namiřte příkazový řádek do tohoto adresáře. Na příkazový řádek napište make a stiskněte klávesu enter. V aktuálním adresáři bude vygenerován spustitelný soubor s názvem ahoj. Výsledek můžete ověřit spuštěním spustitelného souboru pomocí následujícího příkazu.

./Ahoj

Výstupy:

Ahoj světe!

Pravidla, cíle a závislosti

Skript makefile je sbírka pravidel. Pravidla dávají pokyn Vytvořit způsob vytvoření cíle nebo výstupu ze zdrojových nebo jiných souborů. Pravidlo také určuje závislosti cíle. Pravidla závislosti musí být provedena nejprve v závislosti na tom, zda je již zpracována pohledem na časová razítka. V našem příkladu makefile výše, máme pravidlo s názvem cíle hellomain a jeho závislosti. Cílový název je ze seznamu závislostí oddělen dvojtečkou. Příkazy prostředí, které budou provedeny, jsou uvedeny v následujícím řádku. Příkazy prostředí musí začínat znakem tabulátoru.

Pokud v příkazu make nezadáte žádný parametr, provede se první cíl. V našem příkladu jsme neurčili žádný parametr a měli jsme hellomain jako první a jediný cíl.

Proměnné

Proměnné jsou skvělý způsob, jak jednorázově zapsat hodnotu a použít ji opakovaně, aniž by se hodnota opakovala znovu a znovu. Pomáhá nám udržovat náš kód SUCHÝ (Neopakujte se). Pokud někdy potřebujete změnit nějakou hodnotu v celém skriptu, stačí ji změnit na jednom místě tak, aby odrážela změnu všude, pokud používáte proměnnou.

V našem příkladu jsme použili gcc jako překladač, ale možná budeme muset změnit překladač na něco jiného. Název kompilátoru tedy můžeme ponechat v proměnné. Můžeme také ponechat příznaky kompilátoru v jiné proměnné, abychom to mohli znovu použít. Pro nastavení hodnoty do proměnné používáme znaménko rovná se (=) a ke čtení této proměnné používáme $ (název_měnné).

CC = gcc CFLAGS = -I. hellomain: hellomain.c ahoj zábava.c $ (CC) -o ahoj hellomain.c hellomain.c $ (CFLAGS)

Čištění prostředí

Možná často budeme muset vyčistit své prostředí. Pokud chceme, aby byla každá část našeho projektu přestavěna od nuly, musíme ji vyčistit. V našem jednoduchém příkladu je jediný vygenerovaný soubor Ahoj spustitelný. Bez ručního mazání to můžeme smazat pomocí make. Můžeme tedy vytvořit pravidlo a pojmenovat cíl jako čistý.

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

Příkaz shellu v čistém cíli je jen starý příkaz prostředí rm. Nyní z příkazového řádku spusťte:

vyčistit

Podívejte se na aktuální adresář a zjistěte, že Ahoj spustitelný soubor je pryč.

Rozšíření našeho příkladu k vyřešení dalších problémů

V našem jednoduchém příkladu kompilace hello world máme problém, který jsme dosud nevyřešili. hellomain terč se dívá na hellomian.C a ahoj zábava.C časové značky souborů při příštím pokusu o jejich překompilaci udělat nebo udělat hellomain. Pokud tedy některý z těchto dvou souborů změníte, budou znovu zkompilovány. Ale pokud se změníte ahoj zábava.h pak to nebude překompilovat. To je nečekané!

Opět jsme přeskočili střední úroveň. Negenerovali jsme soubory objektů a přímo generovali spustitelný soubor. Ale za scénou jsou soubory objektů vytvořeny v dočasném adresáři a odstraněny. Před vytvořením spustitelného souboru chceme vygenerovat soubory objektů. Tentokrát pojmenujeme hlavní cíl jako Všechno

vše: hellomain.o ahoj.o gcc hellomain.o ahoj.o-o ahoj hellomaine.o: hellomain.c ahoj zábava.h gcc -I. -c hellomain.c ahoj zábava.o: hellofun.c ahoj zábava.h gcc -I. -c ahoj zábava.c clean: rm -rf *.o rm ahoj

Spusťte příkaz make znovu, abyste zjistili, zda se váš program úspěšně vytváří nebo ne. Spusťte spustitelný soubor ahoj a ověřte výsledek. Podívejte se na aktuální adresář a uvidíte, že jsou vytvářeny soubory objektů. Přidali jsme do čistého cíle ještě jeden řádek k vyčištění souborů objektů. Tento skript makefile pomůže překompilovat světový program Hello, i když ahoj zábava.h soubor je upraven.

Závěr

Make je jedním z nejdůležitějších nástrojů pro linuxové uživatele a programátory. Pokud jste koncovým uživatelem, pak vám znalost značky pomůže opravit mnoho rozbitých věcí ve vašem světě linuxu. Pokud jste programátor, nemůžete odejít psaním kódu a nechat své uživatele přijít na to, jak tento zdrojový kód zkompilovat do spustitelných souborů. Musíte vytvořit skript makefile pro koncové uživatele, aby nehráli nějakou hru s hádkami, aby váš zdroj zkompilovali do spustitelných souborů.

Reference

Domovská stránka projektu GNUMake
GNU Vytvořit dokumentaci

Hry Nejlepší hry z příkazového řádku pro Linux
Nejlepší hry z příkazového řádku pro Linux
Příkazový řádek není při používání Linuxu jen vaším největším spojencem - může být také zdrojem zábavy, protože jej můžete použít k hraní mnoha zábavn...
Hry Nejlepší aplikace pro mapování gamepadu pro Linux
Nejlepší aplikace pro mapování gamepadu pro Linux
Pokud rádi hrajete hry na Linuxu s gamepadem místo typického vstupního systému pro klávesnici a myš, máte k dispozici několik užitečných aplikací. Mno...
Hry Užitečné nástroje pro hráče Linuxu
Užitečné nástroje pro hráče Linuxu
Pokud rádi hrajete hry na Linuxu, je pravděpodobné, že jste ke zlepšení herního zážitku použili aplikace a nástroje jako Wine, Lutris a OBS Studio. Kr...