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