Tehdä | |
---|---|
Kieliluokka | rakentaa automaatiotyökalu [d] , UNIX-apuohjelma [d] ,komentosarjakieli,ohjelmointikielija sisennyskieli [d] |
Esiintyi | huhtikuuta 1976 |
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.
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 .
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 .
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:
Oletuksena make käyttää make-tiedoston ensimmäistä kohdetta.
BSD-sovellusten rakennusprosessissa käytetään usein:
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.oJos 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:
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 . hOn 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 = arvoArvo 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ää . hOn 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 . hSiten 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.
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 ]Asennusautomaatiojärjestelmät | |
---|---|
Unix-komennot | ||||||||
---|---|---|---|---|---|---|---|---|
|