Udělat

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 11. ledna 2016; kontroly vyžadují 35 úprav .

Udělat
Jazyková třída nástroj pro automatizaci tvorby [d] , nástroj UNIX [d] ,skriptovací jazyk,programovacía odsazený jazyk [d]
Objevil se v dubna 1976  ( 1976-04 )
Autor Stuart Feldman
Dialekty Značka BSD, značka GNU, Microsoft nmake
ovlivnil Ant , Rake , MSBuild a další
OS Unixové

make  ( IPA [ me ɪ k ] ; z  angličtiny  -  „make“, „make“) je nástroj , který automatizuje proces převodu souborů z jedné formy do druhé. Nejčastěji se jedná o kompilaci zdrojového kódu do objektových souborů a jejich následné propojení do spustitelných souborů nebo knihoven .

Obslužný program používá speciální makefiles , které určují vzájemné závislosti souborů a pravidla pro jejich splnění. Na základě informací o čase poslední úpravy každého souboru, make určí a spustí potřebné programy.

Původ

Před vytvořením systému make build (kompilace) se unixový software obvykle skládal ze skriptů pro vytváření shellu , které doprovázely zdrojový kód programů.

make byl vytvořen Stuartem Feldmanem v dubnu 1976 v Bell Labs .

V současné době existuje mnoho utilit pro sledování závislostí, ale make  je jedním z nejpoužívanějších, především díky tomu, že je obsažen v Unixu , počínaje verzí PWB / UNIX (Eng. Programmer's Workbench ), která obsahovala nástroje pro vývoj softwarové zabezpečení .

Moderní verze

Existuje několik verzí make , založených na původní značce nebo napsaných od začátku, používajících stejné formáty souborů a základní principy a algoritmy, stejně jako některá vylepšení a rozšíření. Například:

POSIX obsahuje standard pro základní funkce make , implementovaný s různým stupněm kompatibility v různých verzích make . Obecně lze jednoduché makefily úspěšně zpracovat různými verzemi make .

Použití

make [ -f makefile ] [ target ] ...

Soubor je prohledán v aktuálním adresáři. Pokud není zadán přepínač -f , použije se výchozí název makefile, Makefile , (ovšem různé implementace make mohou kromě toho kontrolovat další soubory, jako je GNUmakefile ).

make otevře soubor makefile, přečte pravidla a provede příkazy potřebné k vytvoření zadaného cíle .

Standardní cíle pro budování distribucí GNU :

  • all - sestavení balíčku;
  • install - nainstaluje balíček z distribuce (zkopíruje spustitelné soubory, knihovny a dokumentaci do systémových adresářů);
  • uninstall - odstranění balíčku (smaže spustitelné soubory a knihovny ze systémových adresářů);
  • vyčistit - vyčistit distribuci (odstranit z distribuce objekt a spustitelné soubory vytvořené během procesu kompilace);
  • distclean — vyčistí všechny soubory vytvořené během kompilace a všechny pomocné soubory vytvořené obslužným programem ./configure během procesu konfigurace možností kompilace distribuce.

Ve výchozím nastavení make používá úplně první cíl v makefile.

Proces sestavení aplikace BSD často používá:

  • Depend - kompilace / sestavení závislostí.

Makefile

Program make vykonává příkazy podle pravidel specifikovaných ve speciálním souboru. Tento soubor se nazývá makefile. Makefile obvykle popisuje, jak zkompilovat a propojit program.

makefile se skládá z pravidel a proměnných. Pravidla mají následující syntaxi:

cíl1 cíl2 ... : prop1 prop2 ... tým1 tým2 ...

Pravidlo je sada příkazů, jejichž provedení povede k sestavení cílových souborů z atributových souborů .

Pravidlo říká make , že soubory vytvořené příkazy ( targets ) jsou závislé na odpovídajících prop souborech. make nijak nekontroluje ani nepoužívá obsah prop souborů, ale specifikování seznamu prop souborů je vyžadováno pouze pro make, aby se ujistil, že soubory jsou přítomny před tím, než začne spouštět příkazy, a pro sledování závislostí souborů.

Obvykle je cílem název souboru, který je vygenerován jako výsledek zadaných příkazů. Cíl může být také název nějaké akce, která bude provedena jako výsledek provádění příkazů (například čistý cíl v makefiles pro kompilační programy obvykle odstraní všechny soubory vytvořené během procesu kompilace ).

Příkazové řádky musí začínat znakem tabulátoru .

Představte si jednoduchý program v C. Nechte programový program sestávat z dvojice kódových souborů - main.c a lib.c a také jednoho hlavičkového souboru  - defines.h, který je obsažen v obou kódových souborech . Pro vytvoření programu je tedy nutné vytvořit objektové soubory main.o a lib.o z párů (main.c definuje.h) a (lib.c definuje.h) a následně je propojit do programu. Při ručním sestavování musíte provést následující příkazy:

cc -c main.c cc -c lib.c cc -o program main.o lib.o

Pokud jsou během vývoje programu provedeny změny v souboru defines.h , bude vyžadována rekompilace obou souborů a propojení , a pokud změníme lib.c, lze rekompilaci main.c vynechat.

Pro každý soubor, který potřebujeme při kompilaci získat , tedy musíme specifikovat, na základě jakých souborů a jakým příkazem se vytváří. Program make provede na základě těchto informací následující:

  • shromažďuje z těchto informací správnou sekvenci příkazů pro získání požadovaných výsledných souborů;
  • a zahájí vytvoření požadovaného souboru pouze v případě, že takový soubor neexistuje nebo je starší než soubory, na kterých závisí.

Pokud při spuštění make explicitně neurčíte cíl , bude zpracován první cíl v makefile, který nezačíná '.'.

Pro programový program stačí napsat následující makefile:

program : hlavní . o lib . Ó cc -o program main.o lib.o main.o lib.o : definuje . h

Za zmínku stojí řada funkcí. Název druhého cíle určuje dva soubory a pro stejný cíl není zadán žádný kompilační příkaz. Kromě toho závislost objektových souborů na "*.c"-souborech není nikde explicitně specifikována. Je to proto, že program make má předdefinovaná pravidla pro získávání souborů s určitým . Takže pro soubor cílového objektu (přípona „.o“), když je nalezen odpovídající soubor s příponou „.c“, bude zavolán kompilátor „cc -c“, který specifikuje tento soubor „.c“ a všechny soubory závislostí v parametrech.

Syntaxe pro definování proměnných :

proměnná = hodnota

Hodnota může být libovolná posloupnost znaků , včetně mezer a odkazů na hodnoty jiných proměnných . Díky tomu můžeme náš makefile upravit následovně:

OBJ = main.o lib.o program : $( OBJ ) cc -o program $( OBJ ) $(OBJ) : definuje . h

Je třeba poznamenat, že k výpočtu hodnot proměnných dochází až v době použití (používá se tzv. líné hodnocení ). Například vytvoření cíle all z následujícího makefile vytiskne řetězec "Huh?".

foo = $( bar ) bar = $ ( fuj ) fuj = Huh? vše : echo $( foo )

Předpokládejme, že druhý hlavičkový soubor, lib.h, je přidán do projektu a je zahrnut pouze v lib.c. Poté se soubor makefile zvětší o další řádek:

lib.o : lib . h

Jeden cílový soubor tedy může být určen pro několik účelů. V tomto případě bude kompletní seznam závislostí pro soubor sestaven ze seznamů závislostí všech cílů, kterých se účastní, soubor bude vytvořen pouze jednou.

Vícevláknové provádění

Pro urychlení dlouhotrvajících úloh se využívá paralelizace výpočtů v rámci programu make. Paralelizaci provádí automaticky překladač make. Chcete-li spustit makefile ve vícevláknovém režimu, musíte předat volbu -j <počet vláken>.

make [ -j <počet vláken> ] [ cíl ]

Viz také

Literatura

Odkazy