OT hadanka s make na predlzeny vikend
Jindroush
kubecj na asw.cz
Čtvrtek Květen 7 20:17:37 CEST 2015
Version se musi updatovat na zaklade zdrojaku, nikoli binarky a nesmi se
updatovat na zaklade version.h. Typicky by se proste do version.h
zapsala verze ze svn (nebo neco podobnyho z vaseho verzovaciho systemu).
On 7.5.2015 19:43, Jan Waclawek wrote:
> Toto v skutocnosti nie je hadanka, lebo som este neprisiel na dobre
> riesenie (aj ked mam niekolko zlych :-) )
>
> Mam "standardny" makefile tohoto charakteru
>
> x.elf: a.o b.o c.o
> prikaz ktory pusti linker a zlinkuje a.o, b.o a c.o do x.elf
>
> %.o: %.c
> prikaz ktory skompiluje nieco.o do nieco.c (*)
>
>
> Zatial je to vsetko jednoduche.
>
> (*) generuje (prislusnymi prepinacmi pre preprocesor) aj subory so
> zavislostami (dependencies), ktore vznikaju kvoli #include v suboroch
> nieco.c. Makefile obsahuje prikaz, ktorym sa tieto subory includnu.
>
> To je vsetko este normalne.
>
> V a.c mam #include "version.h", v ktorom nie je nic ine ako jedno #define
> VERSION NNN, kde NNN je cislo verzie.
>
> Mam program update_version, ktory vo version.h inkrementuje NNN. Chcem ho
> inkrementovat samozrejme vtedy, ked sa zmeni program v ktorejkolvek jeho
> casti, takze do makefile pridam:
>
> version.h: x.elf
> prikaz update_version
>
>
> no ale make je nespokojny, lebo takto vznikne cyklicka zavislost:
>
> version.h <- x.elf <- a.c <-(v depencency subore, kvoli #includu) version.h
>
> a vypise:
>
> make: Circular version.h <- x.elf dependency dropped.
>
> Ako z toho von?
>
>
> Dakujem
>
> wek
>
>
>
>
> PS. Ak sa niekto chce hrat, tak:
>
> all: x.elf
>
> clean:
> @rm -f *.o
> @rm -f x.elf
>
> init: clean
> @echo creating a.c b.c c.c version.h
> @echo "#include version.h" > a.c
> @echo "blah" > b.c
> @echo "blah" > c.c
> @echo "#define VERSION 123" > version.h
>
>
> x.elf: a.o b.o c.o
> @echo linking
> @cat a.o b.o c.o >x.elf
>
> %.o: %.c
> @echo making $@ from $<
> @cp $< $@
>
> a.c: version.h
> @echo version.h
> @cp $< $@
>
> _version.h: x.elf
> @echo "updating" version.h
> @touch version.h
>
> .PHONY: all clean init
>
>
> # disable implicit rules
> .SUFFIXES:
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
--
Jindroush (kubecj na avast.com)
http://www.kostky.org - Pro fany stavebnic LEGO.
Další informace o konferenci Hw-list