OT hadanka s make na predlzeny vikend
Jan Waclawek
konfera na efton.sk
Čtvrtek Květen 7 19:43:35 CEST 2015
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:
Další informace o konferenci Hw-list