Movatterモバイル変換


[0]ホーム

URL:


Přeskočit na obsah
WikipedieWikipedie: Otevřená encyklopedie
Hledání

make

Z Wikipedie, otevřené encyklopedie
make
VývojářStuart Feldman
První vydání1977
Operační systémmultiplatformní
Vyvíjeno vC
Typ softwarustandardní UNIXová utilita či příkaz,skriptovací jazyk, programovací jazyk se syntakticky významným odsazováním,build system aprogramovací jazyk
LicenceGPL
Webhttp://www.gnu.org/software/make/
Některá data mohou pocházet zdatové položky.

Programmake jeutilita proautomatizaci překladuzdrojových kódů dobinárních souborů (spustitelné souboryELF,EXE,knihovny a podobně). Soubor nazvanýMakefile určuje postuputility make při překladu a definuje závislosti mezi zdrojovými soubory. Při sestavování cíle sleduje maketopologické seřazení v Makefile. Přestože jsou dnes v oblibě různáintegrovaná vývojová prostředí (IDE) a jazykově specifickékompilátory, je make a tedy i Makefile stále široce využíván, zvláště pak naunixových platformách.

Původ

[editovat |editovat zdroj]

Přestože existuje mnoho utilit sledujících závislosti souborů při kompilaci, make je jednou z nejrozšířenějších. Mezi nejrozšířenější se řadí díky tomu, že existuje vUnixu již od verzePWB/UNIX 1.0. Tato verze se vyznačovala množstvím nástrojů zaměřených na vývojsoftware. Make byl původně vytvořenStuartem Feldmanem v roce1977 vBellových laboratořích. V roce2003 byla Dr. Feldmanovi udělena cenaACM Software System Award za vynález tohoto důležitého nástroje.

Před představením make seUnixový překladový (dále jen build) systém skládal z "make" a "install" shellovýchskriptů doprovázejících zdrojové kódy. Schopnost kombinace příkazů pro různé cíle v jednom souboru,abstrakce řešení závislostí a archivace byly důležitým krokem směrem k moderním build systémům.

Moderní verze

[editovat |editovat zdroj]

Kód programu make prošel množstvím úprav a také byl několikrát zcela přepsán. Všechny varianty ovšem používaly stejný formát souboru Makefile a stejné základníalgoritmy. Postupem času vznikly varianty obsahující množství vlastních nestandardních vylepšení. Některé z nich jsou:

  • BSD make, který je odvozen z verzeAdama de Boora na verzi make schopnou vytvářet cíle paralelně. Tato verze si je schopná poradit s modifikacemi proFreeBSD,NetBSD aOpenBSD. Nejzajímavějšími vlastnostmi jsou podmínky a opakovací smyčky, které jsou aplikovatelné v parsovací části. Jsou využívány při programátorském přístupu ke konstrukci Makefile, který generuje cíle vruntime.
  • GNU Make, který je součástíLinuxových distribucí, je často zmiňován ve spojení sGNU build systémem. Jeho rozdíly od tradičního make jsou nejvíce zřetelné v porovnávání šablon vgrafech závislostí a sestavování cílů. Stejně tak tomu je u množství funkcí, které mohou přinutit make například získat seznam souborů v konkrétním adresáři.
  • Microsoft nmake, dostupný veWindows. Z pohledu schopností nabízí oproti dvěma výše zmíněným variantám pouze základní vlastnosti. Microsoft nmake nemá nic společného s nmake zAT&T aBell Labs proUnix.

POSIX obsahuje standardizaci základních dovedností a operací make utility. Make je implementuje v různých stupních. Obecně mohou být jednoduché varianty souboru Makefile využívány bez problémů různými verzemi nástroje make. Některé verze GNU make a BSD make nejdříve hledají soubory nazvané "GNUmakefile", resp. "BSDmakefile", které umožňují rozlišit chování specifické pro konkrétní variantu nástroje make.

Výhody a nevýhody

[editovat |editovat zdroj]

Make vyžaduje od programátora manuální popis všech závislostí mezi soubory projektu. Zmíněný postup je ovšem náchylný k chybám. Při opomenutí některé závislosti není chyba okamžitě zřejmá. Pomoci může vytvoření Makefile generujícího závislosti, ale častěji se využívá řešení s využitím speciálního generátoru, např. nástrojeautomake poskytovanéhoGNU projektem.

Další problém, který není dobře řešen, je tvoření kompilačního procesu na míru platformy. Například kompilátor užívaný na jedné platformě nemusí akceptovat některé volby využívané jiným. Tento problém je řešen generováním platformě specifických instrukcí kompilátoru, které jsou zpracovány make. Využívá se nástrojeautoconf aCMake.

Make využívá v souboru Makefilesyntaxi, která používátabulátor abílé znaky. Neexistuje mnohotextových editorů, které by podporovaly názorné zobrazení rozdílů mezi bílými znaky a usnadnily tím tvorbu Makefile. Znaky tab také nebývají jednotně reprezentovány. Kvůli těmto problémům je syntaxe Makefile často kritizována. Některé projekty jakoApache Ant se snažily předělat lepší syntax make, což je to vcelku nepodstatné pro programátory využívající generátory Makefile.

S příchodem moderních IDE (hlavně na ne-unixových platformách) se velmi málo programátorů zaobírá manuální správou závislostí mezi soubory projektu. Úkol správy závislostí je přenesen na IDE, kde je automatizován. Stejně tak mnoho moderních programovacích jazyků používá jazykově-specifické způsoby výčtu závislostí, které jsou efektivněji rozpoznány s použitím jazykově-specifických kompilačních utilit.

Make je považován zadeklarativní programovací jazyk[1][2][3] a tyto jazyky jsou někdy považovány za složitější pro programátory zvyklé napříkazové programovací jazyky.[4]

Struktura Makefile

[editovat |editovat zdroj]

Makefile se skládá z řádků textu definujících závislost cíle na souborech. Cílem může být množina souborů, nebo název pravidla. Např. výstupní soubor kompilace je značen jako cíl závislý na svých zdrojových souborech a souborech odkazovaných interně. Po řádku naznačujícího závislosti může následovat série příkazových řádků. Příkazové řádky se označují odsazením pomocí tabulátoru. Příkazové řádky definují transformaci vstupu do výstupu. Transformace se aplikují pouze tehdy, pokud je cíl starší než některý ze souborů/odkazů, na kterých je závislý. Základní struktura je:[5]

# Komentářcíl: závislostpříkaz 1příkaz 2...příkaz n

Makefile může obsahovat definice proměnných a odkazovat se na jiné Makefile. Proměnné v Makefile mohou být přepsány příslušnými argumenty zpříkazového řádku při spouštění make. Tímto způsobem lze specifikovat rozdílné chování při sestavování cíle. Například proměnná "CC" je často používána v Makefile jako odkaz na kompilátor jazykaC, ovšem uživatel si může přát použít alternativní kompilátor.

Sufixová pravidla

[editovat |editovat zdroj]

Sufixová pravidla umožňují definovat závislosti a způsob vytváření souborů podle přípon jmen souborů. Například pravidlo, že z každého zdrojového souboru vjazyce C s příponou .c lze překladačem cc získat cílový soubor s příponou .o lze zapsat pravidlem:

.c.o:cc$<-o$@

Řetězce$@ a$< jsou tak zvanéautomatické proměnné a zastupují cílové jméno, respektive tzv. „implicitní“ zdroj. Existuje mnoho dalších automatických proměnných.[5][6]

Automatické proměnné

[editovat |editovat zdroj]
ProměnnáVýznam
$@jméno cíle
$<jméno první závislosti
$+jména všech závislostí (včetně jejich opakování)
$^jména všech závislostí bez opakování, u členů knihoven pouze jejich jména
$?jména všech závislostí, které jsou novější než cíl
$%jméno závislosti bez jména knihovny
$*kořen jména (část odpovídající znaku % ze sufixového pravidla, resp. jméno předpokladu z explicitního pravidla bez přípony)

Příklad Makefile

[editovat |editovat zdroj]

Níže je uveden velmi jednoduchý Makefile, který definuje kompilaci zdrojového souboru nazvanéhohelloworld.c s použitímcc jako kompilátoru jazyka C. PHONY tag je specialita, která příkazu make oznamuje, které názvy cílů nejsou soubory.

helloworld: helloworld.occ -o $@ $< helloworld.o: helloworld.ccc -c -o $@ $< .PHONY: clean clean:rm -f helloworld helloworld.o 

Související články

[editovat |editovat zdroj]

Reference

[editovat |editovat zdroj]

V tomto článku byl použitpřeklad textu z článkuMake_(software) na anglické Wikipedii.

  1. What is a DSL? [online]. phoenix.labri.fr [cit. 2009-05-02].Dostupné v archivu pořízeném dne 2007-10-23. (anglicky) 
  2. Choreography and REST [online]. w3.org [cit. 2009-05-02].Dostupné online. (anglicky) 
  3. Target Junior Makefiles [online]. robots.ox.ac.uk [cit. 2009-05-02].Dostupné online. (anglicky) 
  4. Thesis Defense on XForms [online]. [cit. 2009-05-02].Dostupné online. (anglicky) 
  5. 12Je potřeba mít na paměti citlivost make na bílé znaky. Odsazené řádky příkladu jsou ve funkčním kódu odsazeny pomocí tabulátoru.
  6. 10.5.3 Automatic Variables [online]. gnu.org [cit. 2009-05-02].Dostupné online. (anglicky) 

Externí odkazy

[editovat |editovat zdroj]

(česky)

(anglicky)

Projekt GNU
HistorieGNU's not a Unix
Licence
Software
Stoupenci
Ostatní
Autoritní dataEditovat na Wikidatech
Citováno z „https://cs.wikipedia.org/w/index.php?title=Make&oldid=25154715
Kategorie:
Skryté kategorie:

[8]ページ先頭

©2009-2026 Movatter.jp