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

en Canon EOS 6D or 90D?, December 7, 2021 in reviews
en Arduino Build: Page Turner, November 29, 2021 in code
en Can We Be More Tolerant?, November 24, 2021 in humanity
cs Lorem ipsum recept, November 15, 2021 in family
cs Zápisky z cest: České Švýcarsko, November 8, 2021 in travel