pre fanusikov make

Jan Waclawek konfera na efton.sk
Čtvrtek Květen 9 19:18:20 CEST 2013


> Bylo tam nmake, omake a GNU make ale jen verze 3.81. Verzí 3.80 to nešlo.

Tak toto je vzdy radost... :-) Raz som (bez znalosti podstaty veci) vygeneroval z prostredia co je okolo prekladaca lcc nejaky makefile a poslal ho jednemu ortodoxnemu UNIXakovi spolu so zdrojakmi pridavajucimi nejake vlastnosti k jeho opensource projektu (naviac tie moje casti zdrojakov boli zarovnavane v mojom oblubenom One True style). Od toho okamihu jeho komunikacia voci mne dost vyrazne ochladla... ;-) 

>> %.bin : 
>       ^ mezera navic?
 
Nie, ta vobec nevadi.

Ale pripustam, ze by to mohol byt problem; to je tazke len tak na pohlad povedat, ze ta dokumentacia k make je pri vsetkej patricnej ucte k autorovi velmi jemne povedane odpad, a neobsahuje ani taku zakladnu vec ako slusna (citaj: strucna, kompletna) definicia syntaxe makefile. 

Predpokladam, ze k drvivej vacsine ostatnych verzii make sa autori nenamahali, v pravom UNIXovskom duchu, ani s tou odpadnou dokumentaciou; man make predsa musi stacit kazdemu.
[EDIT] V tomto bode asi nemam pravdu, gugl ukazal, ze referencna prirucka k make v UNIXe je http://enacit1.epfl.ch/guide_unix/make.txt  a tam ta syntax popisana nejako je, rozhodne lepsie ako u Stallmana [/EDIT]


> make obsahuje implicit rule:
>     { "%", "s.%",
> 
> "$(GET) $(GFLAGS) $(SCCS_OUTPUT_OPTION) $<" }
> vid make -p


Ano, resp. nieco ako %:: s.%. Ta dvojita dvojbodka je tu klucova; znamena to, ze toto pravidlo je konecne a pre s.% sa uz nehlada dalej pravidlo v "pattern rules", ten subor musi existovat alebo musi prenho existovat explicitne pravidlo. Ak neexistuje, vypise sa hlaska ktoru som uviedol (t.j. ze neexistuje pravidlo pre s.%); ak ten subor uz existuje, pokusi sa vykonat ten $(GET), co u Win s velkou pravdepodobnostou zlyha; ta hlaska co z toho vypadne je este viac matuca.

Ako pan kolega MilanB naznacil, toto implicitne pravidlo je tam kvoli zdrojakom archivovanym v systeme SCCS, co je predpotopny pradedusko SVN, GIT a spol.

> Pokud se prida jakykoli prikaz do sekce bin, tak to jede.

Ano, ako zaplata, ale to nie je systemove riesenie.


> reseni je v Makefile pouzit target .PHONY:
> 
> .PHONY: bin
> nebo spoustet make s prepinacem -r
> 
> make -r


Ano, a to mozno aj oboje. To prve urcite ano, pretoze sa skutocne nejedna o "realny" subor; to druhe vid v dalsom.

 
> taky jine suffixy nez '.bin' by nefungovali, napr '.asdf'

Ano; ten .bin bol na zmatenie nepriatela :-) presnejsie, zmiatol som tym sam seba, lebo takto sa mi to zhodou okolnosti stalo, a tomu .bin som pripisoval nejaku magicku vlastnost a prave toto som hladal (a nenasiel) v dokumentacii, co mi musel najst kolega. 

No a to vsetko preto, lebo som o implicitnych pravidlach vedel - uz som s nimi raz bojoval; ale ani vo sne by ma nebolo napadlo, ze sa netykaju *pripony* ale - hm. ako to nazvat, predpona? 

Toto ukazuje jeden z tych aspektov UNIXu ktory je v UNIX-haters Handbook tiez opluty, a nedokazem len suhlasit, a to ta nekonecna invencnost v znovuvymyslani kolesa a ocividna nechut tvorit a nasledne akceptovat pravidla a normy. Ved ked sa uz po priekopnickych casoch ustalila forma meno-bodka-pripona, kde meno je meno a pripona urcuje typ suboru (a tak nepriamo prislusnost k programu/programom, ktore ho spracovavaju), co viedlo autorov SCCS k opacnemu postupu, ako meno pouzit prave "s" a do pripony dat vlastne meno suboru/projektu...??? Uplne chore. 

No a druha genialna vec je to, ze aj po viacnasobnej deklaracii utilit UNIXu ako malych jednoduchych lahko zretazitelnych jednoucelovych programov niekto vygeneruje automagickeho bastarda vo forme implicitnych pravidiel, ktore su naviac pomerne napevno zabudovane a s viacerymi dost obskurnymi suvislostami a nasledkami, a to v drvivej vacsine pripadov pre zastarale a davno zabudnute programy... Takze preto je to -r (prepinac potlacajuci implicitne pravidla), resp. asi este lepsie -R, co odstrani aj suvisiace implicitne premenne, lepsie nez ad-hoc riesenia pre konkretne zadrhele; a asi najlepsie je zacat tym, ze sa zabezpeci, ze to -R sa pouzije vzdy  - no a to je to, co si myslim, ze ma pan kolega Troller spravene, ci uz nejako custom skompilovanym make, alebo (co je asi viac pravdepodobne) nejako cez premenne prostredia (MAKEFLAGS?). Bolo by fajn, keby nas pan kolega v tomto smere poucil.

No nic, zase sme si uzili kus zabavy... ;-)

wek



Další informace o konferenci Hw-list