Využívat více Makefile, nebo ne?

cs v kategorii code • 2 min. čtení
Mind the age! Most likely, its content is outdated. Especially if it’s technical.

Už dlouho mám v hlavě otázku „proč se tak málo využívá Makefile?“ Nebo ho snad využívám k něčemu, na co se nehodí? Osobně si u každého projektu Makefile vytvořím a takový základ (jak u čeho) jsou tyto příkazy:

make install-dev
make install-git-hooks
make compile
make compile-css
make compile-js
make watch
make test
make run
make install
make deploy

A jsem s tím velice spokojen. Chápu, že je Makefile definován jako nástroj pro překlad zdrojových souborů do binárních. Proč ale zůstávat jen u toho? Dá se na Makefile nahlížet také jako na nástroj volající bash scripty.

Mohlo by se namítnout, proč využívat Makefile na volání scriptů? Důvodů by se našlo několik. Například bych scripty musel napsat, zde řeším už jen co se má dělat. Napovídání cílů tabulátorem. Samozřejmě i závislosti – jednoduše zařídím, že před testováním se musí nejprve provést kompilace atp.

Každopádně jsem zkusil zapřemýšlet, zda opravdu potřebuju jakýkoliv script. Zda nestačí utility dané technologie. Jelikož jsem programátor, tvorem líným, ukázalo se, že potřebuji. Jsem líný se učit nazpaměť příkazy, kór když se musí volat pokaždé s jinými parametry dle projektu.

cp git-hooks/* .git/hooks/
apt-get install [what is in readme]
pip install -Ur requirements.txt
npm install
recess --compress
coffee --watch -cb
nosetests tests
mocha tests --watch
python setup.py install
python setup.py sdist upload

Takže jsem došel k závěru, že je opravdu skvělé mít Makefile a neřešit, co musím udělat, abych si spustil testy. A když nemám potřebné balíky, nemuset dolovat, které musím nainstalovat, ale jednoduše zavolat make install-dev.

Zdá se, že s tímto názorem nejsem rozhodně sám. Není nás ale mnoho. Co používáte vy a proč?






4 reakce

Je třeba si uvědomit základní rozdíl mezi makefile a shell skriptem.

Makefile je určen na zpracování změněných souborů, takže makefile začíná vytvářením stromů závislostí, pak provedení podmnožiny příkazů v makefile podle porovnání časů změn různých souborů.

Shell skript je určen primárně k provedneí série příkazů.

Makefile je tedy vhodný všude, kde je třeba jen dogenerovat souboru po změnách zdrojových souborů. Ať je to programování, generování dokumentů, cokoli, co není třeba dělat v plné palbě všech příkazů, ale jen aktualizovat na základě změn.

Pokud je třeba jen vykonat příkazy, nebo sérii příkazů jako takových, pak je makefile vcelku zbytečně obtěžující nástroj, jednoduše stačí spustit shellový skript.

Není důvod, proč nepsat makefile s cíly odpovídající všem akcím projektu. Nicméně nemusí to vždy být efektivní, pokud se to přehání.

JInak řečeno, makefile vás dokáže podfouknout tím, že část nebo všechny příkazy neprovede. Jako náhrada shell skriptů to není vhodné. Makefile je geniální tam, kde je třeba jen inkrementálně aktualizovat změny v projektu – nemusí to ani zdaleka být jen sw projekt.

Problémem makefile je ukecanost, a také rozlišování tabelátorů a mezer.

Miloslav Ponkrác

Makefile je super. Také ho používám, abych si nemusel pamatovat, které skripty spouštět.

Záleží, na co to je potřeba. Na instalaci knihoven mi stačí klasický shell script, na git push + deploy na server je jednodušší fabric... Makefile už jsem neviděl ani nepamatuju.

Makefile používám přesně tak, jak je popsáno v článku. A jsem maximálně spokojen. Žádný další takhle jednoduchý a elegantní nástroj jsem nenašel (Ant a podobné hrůzy, jsou IMHO jen nepovedené parodie na Makefile).





Může se vám také líbit

en Makefile with Python, November 6, 2017
en Fast JSON Schema for Python, October 1, 2018
en Deployment of Python Apps, August 15, 2018
cs Jasně, umím Git…, August 6, 2014
cs Checklist na zabezpečení webových aplikací, March 1, 2016

Další články z kategorie code.
Nenechte si ujít nové články díky Atom/RSS kanálu.



Poslední příspěvky

cs Mami, tati, přejde to, December 9, 2023 in family
cs Co vše bychom měli dělat s dětmi?, November 24, 2023 in family
cs O trávicí trubici, November 7, 2023 in family
cs Na šestinedělí se nevyspíš, October 28, 2023 in family
cs Copak to bude?, October 20, 2023 in family