Makefiles 101: kuidas make-d kasutada toimingute automatiseerimise tööriistana

Foto autor Agto Nugroho saidil Unsplash

Näib, et arendajad kardavad make'i kasutamist, kuna seostavad seda valuliku kogemusega, kuidas asju nullist kompileerida - kohutav ./konfigureerimine && make && make install.

Osaliselt on see hirm tingitud sellest, mida kirjeldab mark (1):

Utiliidi make eesmärk on automaatselt kindlaks teha, millised suure programmi tükid tuleb uuesti kompileerida, ja anda käsud nende uuesti kompileerimiseks.
Vaba tarkvara sihtasutus Linux Man Pages

Mitte kõik ei tea, et maketi saab hõlpsasti kasutada projektide ülesannete haldamiseks. Selles artiklis tahaksin jagada lühitutvustust selle kohta, kuidas Makefiles aitab mul automatiseerida mõningaid igapäevaseid tegevusi. See lühike juhend keskendub make kasutamise kasutamisele ülesannete automatiseerimisvahendina, mitte koodi kompileerimise tööriistana.

Ülesannete täitmine

Alustame lihtsalt Makefile'i loomisega ja töötava ülesande määratlemisega:

ülesanne:
  kohting tüdruku või poisiga

Kui käivitate ülesande make, siis põrkub järgmine tõrge:

/ tmp ᐅ tee ülesanne
Makefile: 2: *** puudub eraldaja. Peatu.

Ja see juhtub seetõttu, et Makefiles kasutab koodide taandamiseks sakke. Värskendagem meie näidet, kasutades vahekaartide asemel tühikuid ja… Voilà.

/ tmp ᐅ tee ülesanne
kohting tüdruku või poisiga
Reede 15. juuni 08:34:15 +04 2018

Mis nõiavärk see veel on? Noh, mõistke, et soovite käivitada oma makefile'i lõiguülesande ja käivitasite selle jaotise koodi (kuupäeva) koorega, väljastades nii käsu kui ka selle väljundi. Kui soovite täitmata käsu väljundi vahele jätta, saate selle eesliideks lisada @ -märgiga:

ülesanne:
  @kohting tüdruku või poisiga

Käsu make uuesti käivitamine:

/ tmp ᐅ tee ülesanne
Reede 15. juuni 08:34:15 +04 2018

Makefile'is on esimene ülesanne vaikimisi, see tähendab, et me võime käivitada make ilma ühegi argumendita:

/ tmp ᐅ tegema
Reede 15. juuni 08:37:11 +04 2018

Täiendavate ülesannete täitmine

Saate oma Makefile lisada täiendavaid ülesandeid ja helistada neile make $ TASK abil:

ülesanne:
  @kohting tüdruku või poisiga
mõned:
  magama 1
  kaja "magas"
asi:
  cal

Käsu make uuesti käivitamine:

/ tmp ᐅ tee asi
cal
     Juuni 2018
Su Mo Tu We Th Fr Sa
                1 2
 3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Ülesannete täitmine kindlas järjekorras

Palju kordi soovite mõnda ülesannet täita enne praegust. Mõelge sellele nagu enne või pärast oma automaatsete testide konksu. Seda saab teha täpsustades ülesannete loendi kohe pärast ülesande nime:

ülesanne: asi mõni
  @kohting tüdruku või poisiga
...

Käsu make uuesti käivitamine:

/ tmp ᐅ tee ülesanne
cal
     Juuni 2018
Su Mo Tu We Th Fr Sa
                1 2
 3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
magama 1
kaja "magas"
Magas
Reede 15. juuni 08:40:23 +04 2018

Muutujate kasutamine koos make'iga

Muutujate määratlemine ja kasutamine on üsna lihtne:

VAR = 123
print_var:
        kajas $ {VAR}
...

Käsu make uuesti käivitamine:

/ tmp ᐅ tee print_var
kaja 123
123

Kuid olge ettevaatlik, kuna teie kestmuutujad ei tööta karbist välja:

print_user:
        echo $ USER

Käsu make uuesti käivitamine:

/ tmp ᐅ muuda print_user
kaja SER
SER

Peate neist põgenema kas $ {VAR} või $$ VAR abil.

Lippude edastamine on ka natuke erinev sellest, millega võite olla harjunud. Need on paigutatud lippudeks, kuid kasutavad keskkonnamuutujatena sama süntaksi:

print_foo:
  kajas $ $ FOO

Käsu make uuesti käivitamine:

/ tmp ᐅ tee print_foo
kaja $ FOO
/ tmp ᐅ tee print_foo FOO = riba
kaja $ FOO
baar

Tehke ja kest

5.3.1 Koore valimine
------------------------
Kestina kasutatav programm on võetud muutujast SHELL. Kui seda muutujat pole teie makefailis määratud, kasutatakse kestana programmi `/ bin / sh '.

Make kasutab ülesandes koodi täitmiseks sh. See tähendab, et mõni kraam ei pruugi töötada, kuna kasutate tõenäoliselt mõnda bashile iseloomulikku süntaksit. Lülituseks saate lihtsalt määrata muutuja SHELL. Meie puhul sooviksime kasutada SHELL: = / bin / bash.

Nagu varem nähtud, peate mõnikord kasutama veidrat kohandatud süntaksit, et saada tavaline kesta käsk, mis töötab. Nii nagu muutujatelt tuleb pääseda koos koodiga $$ või $ {...}, peate käsuasenduse kasutamisel kasutama shellit:

alamkell:
  echo $ (kesta echo $ {USER})

Käsu make uuesti käivitamine:

/ tmp ᐅ tee subhell
kaja aleks
aleks

Kas sa ei usu mind? Proovige eemaldada kesta juhised. Saate järgmist:

/ tmp ᐅ tee subhell
kaja

Järeldus

Võimalik on teha veel palju teha ja nii palju keerulisi asju, mida peate selle töötamisel WPS-i (WTF sekundis) vähendamiseks välja selgitama.

See ei lükka ümber asjaolu, et make on äärmiselt kasulik tööriist, mis võimaldab meil töövooge hõlpsalt automatiseerida (ilma et peaksime seadistama väga keerulisi torustikke), kirjutades vahelehtedega eraldatud read hunniku kestakäsklustega.

Algselt avaldati aadressil odino.org (15. juuni 2018).
Võite mind jälgida Twitteris - rantsid on teretulnud!