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