Bevezetés tenni

Cél, történelem, változatok

A make segédprogram célja, hogy automatizálják a szerelvény projekteket. Ha bármely projekt fájlok hozhatók létre más fájlokat, akkor a program lehetővé teszi, hogy végre építése során a legoptimálisabb módon lehetséges, minimálisra csökkentve a feldolgozott fájlokat.

Történelmileg, a segédprogram tervezett szerelvény a C nyelv projektek a Unix operációs rendszer, de lehet használni minden projekthez. Az első változat a rendszer jött létre 1977-ben.

Ma, a leggyakoribb három lehetőség a közüzemi, egyesült közös működési elveinek, de más szintaxist és képességek:

GNU make - a leggyakoribb és funkcionális változata

BSD make (pmake) - használták a BSD projektek alkalmassága nagyjából megegyezik GNU make

nGyőződjön (Microsoft teszi) - Windows alatt fut, malofunktsionalen, csak az alapelveket make.

Dolgozunk a GNU make. BSD rendszereken (pl FreeBSD, lehet, hogy kapható gmake, Linux - csak arra).

alapelvek

hogy közüzemi munkálatok szabályai szerint (szabályok). felvett egy speciális konfigurációs fájlban. Szabályzat határozza meg a célkitűzéseket (célok). zavimosti a célok és az egy sor utasítást, hogy minden cél.

A célok megfelelnek bizonyos fájlokat. Ezen túlmenően, a cél nem felel meg a fájlt, és egyéb célokra használt vagy csoportok meghatározott utasítás szekvenciát tartalmaz. Ilyen célok nevezzük hamis célokat.

Minden célpont függhet végrehajtását más célok. Kivitelezés célokat igényel előzetes végrehajtását más célok, amelyektől függ.

Abban az esetben, a kapcsolat a célok, a megfelelő fájlok a cél kerül végrehajtásra, ha a fájlokat, amelyektől függ, újabb, mint a fájl, amely megfelel a célt. Ez lehetővé teszi, hogy regenerálni csak azokat a fájlokat, hogy függ a megváltozott fájlokat, és nem hajt végre egy potenciálisan hosszú újjáépítése projekt összes fájlt.

Így a Makefile meghatározza a függőség gráf, amelyben a make segédprogram végzi egy adott cél, amennyire csak lehetséges, minél kevesebb szerelési műveletek.

make

Annak ellenére, hogy annak érdekében, hogy a szabályokat, akkor megadhat egy tetszőleges fájlt, általában az alapértelmezett nevet Makefile. Szintén támogatja a számos alternatív nevek az alapértelmezett, de van értelme használni a leggyakoribb.

fogja használni a Makefile. Az aktuális könyvtárban.

Indításakor teszi lehetővé megadni a megcélzott végre kell hajtani. Ha a cél nincs megadva, az alapértelmezett cél, ami szerepel vagy a szabályok fájlba explicit vagy implicit módon használják az első konkrét cél.

Egyértelmű jelzése a cél végezzük DEFAULT_GOAL utasításokat a Makefile.

a feldolgozást célok tiszta Makefile fájlt. található az aktuális könyvtárban.

Megadhat több célokat.

Hogy a célkitűzések segítségével konfigurálható változók (ebből alább). Amikor fut, hogy megadhatja értékeket a változók:

A változó értéke ELŐTAG lesz elérhető a szabályokat Makefile és fel lehet használni az összeszerelés során.

A csapat is támogatja a több lehetőség, melyek közül a legfontosabbak a következők:

-f - lehetővé teszi, hogy egyértelműen meg kell határozni a szabályokat fájl

-C - kapcsolókat a megadott könyvtárba végrehajtása előtt lehet például használni, hogy a futás egy külső könyvtárat a könyvtár, a projekt

-B - letiltja ellenőrzése időfüggő célok és érvényesíti őket teljesen

Az alapvető szintaxis make

Az alapvető tervezési használt make fájlt. Ez a következő:

dep1. dep2 - célok, amelyek függnek a cél cél

parancs1. command2 - végrehajtott parancsok a cél elérése érdekében cél

Ez részlet meghatározza, hogy a style.css fájlt függ a fájl src / kevesebb / app.less és építeni kell végrehajtani lessc src / kevesebb / app.less> style.css. Regeneration style.css fájl lesz végrehajtva, ha a src / kisebb file / app.less újabb, mint a style.css fájlt (ameddig futtatásakor nem tesz -B kulcs kerül meghatározásra).

Mielőtt minden parancsot a leírás a cél kell, hogy legyen jelen a tab karaktert. Elvileg úgy van kialakítva, de ez jobb, hogy egy közös megállapodást. Ha terek helyett használt lapok, hogy nem fog működni.

Mivel a célra feldolgozásának használt parancsok shell parancsokat. A parancs szöveg jelenik meg, úgy, hogy ez nem egy következtetés, a csapat meg kell kezdeni a @ szimbólumot.

Minden csapat fut egy külön shell, a kagyló, így a parancsokat nem kapcsolódnak egymáshoz. Más szóval, a parancssor - egy héj. Ez a viselkedés felülírható egy speciális .ONESHELL.

Ha a parancs (vagy függőségek), írásban kell több sor, használja a kötőjel \.

PHONY célok

Célok, amelyek nem felelnek meg a fájlokat, és célja, hogy végezzen egy sor parancs vagy csoportok zavimostey kijelentette az alábbiak szerint:

.PHONY nyilatkozatok lehet több, általában meghatározzák egy és előírt valamennyi vonatkozó célkitűzéseket.

Példánkban a hívás, hogy tiszta lesz végre a tiszta célt. ami természetesen eltávolítja az ideiglenes fájlokat.

Abban az esetben, ha van egy függőségi hamis célt, mint a másik hamis cél, akkor a kapcsolat előtt elvégzik független célra. Így van egy olyan mechanizmust, emlékeztet a rutin. Például, tudjuk meg a célból, hogy minden. összegyűjtése a projekt fájlokat, és az egyéni célok css. js és php. elkülönítetten gyűjtött -files css, js -files és feldolgozás php fájlokat.

Ennek megfelelően tudjuk írni a Makefile:

Ennek eredményeként, fel tudjuk használni a make mindenki újra minden fájlt, és azt mondják, hogy css újjáépíteni csak CSS fájlban.

változók

A make-fájlt, akkor használják a változókat, bár helyes azt mondani, hogy tudod használni a makrókat.

Definiált változók makefile hozzárendelt vagy lehet továbbítani külsőleg.

Változók - a makró, és a számítás a változó mindig történik az utolsó pillanatban, mielőtt a cserét. Makrók bárhol lehet használni a szövegben a make.

A helyettesítés hajtódik végre konstrukciót $ (VAR) ellentétben a héj, amely felhasználja $ VAR.

Ha a héj parancs a shell-változót, be kell jelentkeznie $ kvótákat. megkettőzése meg, például:

Makrováltozók kívül van hagyományosabb, ahol be van állítva egyszer. az üzemeltető által alkalmazott dolgozni: =. A mi viszonyaink között, elegendő használni hagyományos változókat.

Gyakran azt szeretnénk, hogy határozza meg a változó csak akkor, ha még nem határozták meg. Ebből a célból az üzemeltető =.

Ennek megfelelően, ha hívjuk

UTF8 kódolást fogja használni. és abban az esetben

Meg fogják használni CP1251.

Ha a változó egy pár sort, akkor a meghatározására szintaxist.

automatikus változók

Tedd állítja egy sor automatikus változók, amelyek megkönnyítik az írás szabályait. Például a változó $ @ megfelelő a jelenlegi cél (mi maradt.), És a változó $ ^ - azoknak a függőségek (azaz a jogot.). Így például, akkor írj:

Ennek eredményeként a www / js / script.js az eredménye, mely három js-fájlokat.

A teljes lista ezeket a változókat mutatja a dokumentációban, a legérdekesebb számunkra:

$<— имя первой зависимости

$? - a nevét, a függőségek, amelyek újabbak, mint a cél

$ ^ - a nevét, a függőségek célok

A teljes lista megtalálható a dokumentációban: Az automatikus változók.

feltételes

A Makefile, akkor feltételes kifejezések. Ismét beszélünk makroobrabotke teszik, illetve feltételes kifejezések dolgoznak makefile szinten, nem pedig a szint a csapatok. Általában feltételes kifejezések meghatározására használják egy adott célra, értékétől függően változó. Például:

Ahogy a feltételek lehet ellenőrizni, hogy meghatározzuk a változó és értéke:

Teljesen a lehetőségeket feltételes kifejezések megtalálható a dokumentációban: Feltételes szintaxis.

minta szabályok

Minta szabályok (minta szabályok) lehetővé teszi, hogy adjon meg egy átváltási szabály egy fájlt egy másik alapján a kapcsolatát a nevüket. Például tudjuk meg a szabályt, hogy készítsen egy objektum fájlt egy fájlt a C nyelven:

Figyeljük meg a%<. которая в таких правилах используется для получения имени исходного файла.

A sablonok nem kell korlátozni, hogy a fájl kiterjesztését. Ha az eredeti és a kimeneti fájlok megfelelnek egymásnak, és nevük van-e összefüggés, akkor a minta szabályt.

Integráció más fájlokat, hogy

hogy a fájl tartalmazhat egyéb fájlokat, hogy a megállapításokat tartalmaznak.

Így egy fájlból, akkor lehet építeni egy moduláris rendszer, gyakran van értelme, hogy végre bele a feltételes állítás.

Tedd meghatározza sok olyan funkciót lehet használni, mint változók (makrók). Egy funkció kerül végrehajtásra felépítése:

Funkciók lehetővé teszik, hogy kezelni húrok, fájlnevek szervez ciklusban egy értékrend, szervezni feltételes vételi egyéb funkciók.

Néhány példa a kaptár. Kapunk az aktuális időt (vegye figyelembe a használata: =.

Fájl beillesztése container.mk csak akkor, ha létezik:

Kialakulása MySQL adatbázis neve nevében a projekt:

Az adagolást és utótagoknak fájlnevekhez

saját funkciója

Hozhat létre saját paraméteres függvény definiálásával változó tartalmú speciális változók $ 1. $ 2. megfelelő át egy érv. Hívjon egyéni függvény egy speciális makró hívást.

Nagyon hülye példa:

Most lehet írni:

rekurzív make

Amellett, hogy a felvétel egy másik make fájl Makefile végezhet más fájlt, hogy egy külön make-folyamatot.

Ez egy meglehetősen gyakori helyzet abban az esetben, moduláris projektek. Például, minden egyes a projekt komponensek (szerver, kliens könyvtár), amennyiben egy Makefile. ugyanakkor a fő Makefile. készletet meghatározó általános beállítások és okoz Makefile minden alprojekt.

Hívás a Makefile gyakran nevezik submake. Változó $ (MAKE) használják a hívást.

Ez a változó az utat, hogy a program. feldolgozása az aktuális fájlt.

Hogy telik változókat a hívott így kifejezetten meg kell exportált fájlt:

A változó értéke ELŐTAG lesz elérhető alrendszer / Makefile.

a párhuzamos

Tedd képes a párhu- végrehajtását a szabályokat. Erre a célra a -j opciót. lehetővé teszi, hogy meghatározza a több párhuzamos folyamatok használják. Amellett, hogy felgyorsítja a fordítási folyamat, ez a funkció néha megvalósítását teszi lehetővé a térd nagyon egyszerű feldolgozási forgatókönyv, amely többfeladatos. Például, akkor végre egy egyszerű, de funkcionális sorkezelőnek hogy segítségével a fájlok tárolására feladatok és a munkahelyek könyvtárak a fájlok tárolására különböző szakaszaiban (várakozás, végrehajtás, eredmény).

Párhuzamos végrehajtás le lehet tiltani a segítségével speciális .NOTPARALLEL.

specifikus célok

Tedd állítja egy sor olyan célkitűzést, amelyeket fel lehet használni, mint a módosítók jövőbeli célokra vagy szolgáltatás utasításokat. Íme néhány ilyen speciális célokra:

PHONY - meghatároz egy hamis célokat;

Alapértelmezett - meghatározza a célra, amely fogják hívni, ha nem talált érzékeny célpontra szükséges egyéb célra;

Ignore - meghatározza a célokat, amelyeket el kell figyelmen kívül hagyni a hibákat végrehajtása a cél;

CSENDES - meghatározza a célkitűzéseket, amelyekre szükség van, hogy elnyomja a termelés a végrehajtott parancsok cél;

NOTPARALLEL - megtiltja a párhuzamos végrehajtását a make;

ONESHELL - végrehajt egy sor parancs egyetlen célja során a héj.

használati esetek

További gyakran beszélnek, hogy összefüggésben álló szerelvény program C / C ++, a végén, erre a célra eredetileg szánták. Azonban, hogy - sokkal sokoldalú eszköz. Írás a make, mi deklaratív leírására egy bizonyos állam közötti kapcsolatok a fájlokat, amelyek mindegyike fut make megpróbálja fenntartani. A deklaratív meghatározása az állam nagyon kényelmes, abban az esetben semmilyen kényszerítő nyelv (pl kagyló), mi lett volna, hogy végezzen számos különböző vizsgálatok, így egy összetett és bonyolult kódot.

Ezen túlmenően, a használata közötti függőségek hamis célokat, amely lehetővé teszi, sőt, deklaratív leírnak bizonyos (korlátozott) állapotú gép, hasznos lehet az írás különféle adminisztratív szkripteket. A make vázként különböző shell-parancs, van valójában egy alapvető keretét a héj egy kész felhasználói felület (hívás, hogy + Variable Transmission), beépített függőség nyomkövető eszközzel, a párhuzamos végrehajtás, makró definíciók, stb

Ezért alapvető ismeretek lehetővé teszi, hogy számos esetben, hogy megoldja a problémát, ha nem a legszebb, de nagyon gyors és megbízható módon.

Kapcsolódó cikkek