Tehdä

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 11. tammikuuta 2016 tarkistetusta versiosta . tarkastukset vaativat 35 muokkausta .

Tehdä
Kieliluokka rakentaa automaatiotyökalu [d] , UNIX-apuohjelma [d] ,komentosarjakieli,ohjelmointikielija sisennyskieli [d]
Esiintyi huhtikuuta 1976  ( 1976-04 )
Tekijä Stuart Feldman
Murteet BSD-merkki, GNU-merkki, Microsoft nmake
vaikutti Ant , Rake , MSBuild ja muut
OS Unixin kaltainen

make  ( IPA [ me ɪ k ]englanniksi  -  "make", "make") on apuohjelma , joka automatisoi tiedostojen muuntamisen lomakkeesta toiseen. Useimmiten tämä on lähdekoodin kääntämistä objektitiedostoiksi ja sitten linkittämistä suoritettaviksi tiedostoiksi tai kirjastoiksi .

Apuohjelma käyttää erityisiä make -tiedostoja, jotka määrittelevät tiedostojen riippuvuudet toisistaan ​​ja säännöt niiden täyttämiseksi. Kunkin tiedoston viimeistä muokkausaikaa koskevien tietojen perusteella make määrittää ja suorittaa tarvittavat ohjelmat.

Alkuperä

Ennen make build -järjestelmän (käännöksen) luomista Unix- ohjelmisto koostui yleensä shell build -skripteistä , jotka liittyivät ohjelmien lähdekoodiin.

make loi Stuart Feldman huhtikuussa 1976 Bell Labsissa .

Tällä hetkellä on monia apuohjelmia riippuvuuksien seurantaan, mutta make  on yksi laajimmin käytetyistä, mikä johtuu ensisijaisesti siitä, että se sisältyy Unixiin , alkaen PWB / UNIX-versiosta (Eng. Programmer's Workbench ), joka sisälsi työkaluja kehittämiseen. ohjelmistojen turvallisuus .

Nykyaikaiset versiot

Make :sta on useita versioita , jotka perustuvat alkuperäiseen merkkiin tai kirjoitetaan tyhjästä ja käyttävät samoja tiedostomuotoja ja perusperiaatteita ja algoritmeja sekä joitain parannuksia ja laajennuksia. Esimerkiksi:

POSIX sisältää standardin merkin perusominaisuuksille , jotka on toteutettu eri versioiden yhteensopivuusasteella . Yleensä yksinkertaiset make-tiedostot voidaan käsitellä onnistuneesti eri make -versioilla .

Käyttö

tee [ -f makefile ] [ kohde ] ...

Tiedostoa etsitään nykyisestä hakemistosta. Jos -f-kytkintä ei ole määritetty, käytetään oletusarvoista makefile-nimeä Makefile (tosin make -sovelluksen eri toteutukset voivat tarkistaa tämän lisäksi muita tiedostoja, kuten GNUmakefile ).

make avaa maketiedoston, lukee säännöt ja suorittaa määritetyn kohteen rakentamiseen tarvittavat komennot .

Vakiokohteet GNU - jakelujen rakentamiseen:

  • kaikki - rakentaa paketti;
  • asennus - asenna paketti jakelusta (kopioi suoritettavat tiedostot, kirjastot ja dokumentaatiot järjestelmähakemistoihin);
  • poista - poista paketti (poistaa suoritettavat tiedostot ja kirjastot järjestelmähakemistoista);
  • puhdistaa - puhdistaa jakelu (poista jakelusta käännösprosessin aikana luodut objektit ja suoritettavat tiedostot);
  • distclean — puhdista kaikki kääntämisen aikana luodut tiedostot ja kaikki ./configure-apuohjelman luomat aputiedostot jakelun käännösasetusten määrittämisen aikana.

Oletuksena make käyttää make-tiedoston ensimmäistä kohdetta.

BSD-sovellusten rakennusprosessissa käytetään usein:

  • depend - kääntää / rakentaa riippuvuuksia.

Makefile

Make -ohjelma suorittaa komennot erityisessä tiedostossa määritettyjen sääntöjen mukaisesti. Tätä tiedostoa kutsutaan makefile-tiedostoksi. Tyypillisesti makefile kuvaa ohjelman kääntämistä ja linkittämistä.

makefile koostuu säännöistä ja muuttujista. Säännöillä on seuraava syntaksi:

kohde1 kohde2 ... : prop1 prop2 ... joukkue 1 joukkue 2 ...

Sääntö on joukko komentoja, joiden suorittaminen johtaa kohdetiedostojen kokoamiseen attribuuttitiedostoista .

Sääntö kertoo , että komentojen ( targets ) tuottamat tiedostot ovat riippuvaisia ​​vastaavista prop-tiedostoista. make ei tarkista tai käytä prop-tiedostojen sisältöä millään tavalla, mutta prop-tiedostojen luettelon määrittäminen vaaditaan vain, jotta voidaan varmistaa tiedostojen olemassaolo ennen komentojen suorittamista ja seurata tiedostojen riippuvuuksia.

Yleensä kohde on määritettyjen komentojen tuloksena luodun tiedoston nimi. Kohde voi olla myös jonkin toiminnon nimi, joka suoritetaan komentojen suorittamisen seurauksena (esimerkiksi käännösohjelmien makefile-tiedostojen puhdas kohde yleensä poistaa kaikki käännösprosessin aikana luodut tiedostot ) .

Komentorivien tulee alkaa sarkainmerkillä .

Harkitse yksinkertaista C-ohjelmaa. Olkoon ohjelmaohjelma koostuva parista kooditiedostoista - main.c ja lib.c sekä yhdestä otsikkotiedostosta  - defines.h, joka sisältyy molempiin kooditiedostoihin . Siksi ohjelman luomiseksi on tarpeen luoda oliotiedostot main.o ja lib.o pareista (main.c defines.h) ja (lib.c defines.h) ja linkittää ne sitten ohjelmaan. Kun rakennat manuaalisesti, sinun on suoritettava seuraavat komennot:

cc -c main.c cc -c lib.c cc -o ohjelma main.o lib.o

Jos defines.h-tiedostoon tehdään muutoksia ohjelman kehittämisen aikana, tarvitaan sekä tiedostojen uudelleenkääntäminen että linkittäminen , ja jos muutamme lib.c:tä, main.c-tiedoston uudelleenkääntäminen voidaan jättää pois.

Jokaiselle käännösprosessin aikana saatavalle tiedostolle on siis määritettävä, minkä tiedostojen perusteella ja millä komennolla se luodaan. Make -ohjelma tekee seuraavat tiedot näiden tietojen perusteella:

  • kerää näistä tiedoista oikean komentosarjan saadakseen tarvittavat tuloksena olevat tiedostot;
  • ja aloittaa vaaditun tiedoston luomisen vain, jos sellaista ei ole olemassa tai se on vanhempi kuin tiedostot, joista se riippuu.

Jos et nimenomaisesti määritä kohdetta, kun suoritat komennon make , niin make-tiedoston ensimmäinen kohde, joka ei ala merkillä, käsitellään.

Ohjelmalle riittää seuraavan make-tiedoston kirjoittaminen:

ohjelma : main . noin lib . o cc -o-ohjelma main.o lib.o main.o lib.o : määrittelee . h

On syytä huomata useita ominaisuuksia. Toisen kohteen nimi määrittää kaksi tiedostoa, eikä samalle kohteelle ole määritetty käännöskomentoa. Lisäksi objektitiedostojen riippuvuutta "*.c"-tiedostoista ei ole erikseen määritelty missään. Tämä johtuu siitä, että make -ohjelmassa on ennalta määritellyt säännöt tiedostojen hankkimiseksi tietyillä . Joten kohdeobjektitiedoston (tunniste ".o") kohdalla, kun vastaava tiedosto tunnisteella ".c" löytyy, kutsutaan kääntäjää "cc -c", joka määrittää tämän ".c"-tiedoston ja kaikki riippuvuustiedostot parametreissa.

Syntaksi muuttujien määrittämiseen :

muuttuja = arvo

Arvo voi olla mikä tahansa merkkijono , mukaan lukien välilyönnit ja viittaukset muiden muuttujien arvoihin . Tämän jälkeen voimme muokata make-tiedostoamme seuraavasti:

OBJ = main.o lib.o -ohjelma : $( OBJ ) cc -o ohjelma $( OBJ ) $(OBJ) : määrittää . h

On huomattava, että muuttujien arvojen laskenta tapahtuu vain käytön aikana (käytetään ns. laiska arviointia ). Esimerkiksi koko kohteen rakentaminen seuraavasta make-tiedostosta tulostaa merkkijonon "Huh?".

foo = $( bar ) bar = $( ugh ) ugh = häh? kaikki : echo $( foo )

Oletetaan, että projektiin lisätään toinen otsikkotiedosto, lib.h, ja se sisältyy vain lib.c:hen. Sitten makefile kasvaa vielä yhdellä rivillä:

lib.o : lib . h

Siten yksi kohdetiedosto voidaan määrittää useisiin tarkoituksiin. Tässä tapauksessa tiedoston täydellinen riippuvuusluettelo kootaan kaikkien niiden kohteiden riippuvuusluetteloista, joihin se osallistuu, tiedosto luodaan vain kerran.

Monisäikeinen suoritus

Pitkäaikaisten tehtävien nopeuttamiseksi käytetään laskelmien rinnakkaisua make-ohjelman sisällä. Make-tulkki tekee rinnakkaisarvon automaattisesti. Jotta Makefile voidaan suorittaa monisäikeisessä tilassa, sinun on välitettävä -j <säikeiden määrä> -vaihtoehto.

tee [ -j < säikeiden määrä> ] [ kohde ]

Katso myös

Kirjallisuus

Linkit