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.
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
Miloslav Ponkrác,
9. 12. 2013
Makefile je super. Také ho používám, abych si nemusel pamatovat, které skripty spouštět.
Petr,
9. 12. 2013
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.
76house,
9. 12. 2013
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).