OT hadanka s make na predlzeny vikend
Jan Waclawek
konfera na efton.sk
Středa Květen 13 09:34:42 CEST 2015
Tak som sa sam so sebou dohodol na tomto rieseni:
- skutocny makefile premenujem na makefile.real
- v makefile.real, zoznam suborov, ktore vstupuju do linkovania, dam do
premennej ELF_PREREQUISITES
- v makefile.real vytvorim novy target version.timestamp, ktory ma ako
prerequisites tiez ELF_PREREQUISITES, a ako recept to, ze pomocou touch
vytvori/zmeni cas suboru version.timestamp a tiez zmeni cas suboru
version.h na aktualny
- za recept pre elf pridam recept pre inkrement cisla verzie vo version.h a
za nim pomocou touch zmenim cas version.h na nejaky velmi stary
- vytvorim novy makefile pod menom makefile, v ktorom pre "vedlajsie"
targety (typicky clean) je jednoducho len "volany" makefile.real s tym
targetom
- pre target all je "volany" makefile.real najprv s targetom
version.timestamp a potom s targetom all
Toto sposobi, ze:
- pri prvom volani "make -f makefile.real version.timestamp" sa vdaka
zavislosti version.timestamp (ktory ma v podstate rovnaky cas ako posledny
vytvoreny .elf, urcite starsi ako kazde nasledne rucne editovanie
zdrojovych suborov) na ELF_PREREQUISITES skompiluju vsetky subory ktore
boli zmenene; pricom sa subory, ktore zavisia na version.h, nekompiluju,
ak neboli explicitne zmenene, kedze version.h ma cas velmi stary. Toto by
malo pochytit vsetky zavislosti vratane vnorenych do dalsich makefile.
- ak sa pritom zisti, ze nic nebolo treba kompilovat, version.timestamp sa
nezmeni, a version.h zostane velmi stary
- ak sa nieco prekladalo, version.timestamp aj version.h sa zmenia na
aktualny
- pri druhom volani "make -f makefile.real x.elf" (all je ekvivalentny
x.elf), ak sa v prvom kroku nic nezmenilo, tak sa tiez nic nespravi; ak sa
zmenilo, tak sa skompiluju vsetky subory ktore zavisia na version.h (kedze
ten je novsi ako posledne skompilovane objekty) a urobi sa linkovanie; a
potom sa version.h umelo zmeni na stary
Vyhoda je, ze:
- "neplytva" sa zbytocne verziami (co ma za pozitivny nasledok aj to, ze
nezmenene zdrojaky napr. z archivu sa vzdy skompiluju na ten isty binar aj
po viacnasobnej "rekompilacii", toto moze byt vyznamne napr. pri urcitych
certifikacnych postupoch)
- nelinkuje sa zbytocne, pri velkom projekte to moze usetrit vyznamny cas
Nedostatky tohto postupu su:
- dvakrat sa robi kontrola zavislosti na celom strome, ale to obvykle
netrva dlho, typicky daleko menej ako linkovanie
- ak sa explicitne zmeni niektory zo suborov zavislych na version.h,
kompiluje sa dvakrat (to obvykle nevadi, tie subory typicky obsahuju len
definiciu premennej inicializovanej tou verziou, alebo nieco podobne
jednoduche)
wek
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.zip
Type: application/x-zip-compressed
Size: 1160 bytes
Desc: not available
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20150513/fb8740e7/attachment.bin>
Další informace o konferenci Hw-list