Mail Archives: djgpp/1996/04/15/13:50:58
"Rafael R. Sevilla" <rsevilla AT upd DOT edu DOT ph> writes:
>Hi. I've been using Bison for some time to build a small language, and it
>appears to give me lots of problems in conjunction with make. In order to
>make my lang.c file for example, my makefile has the following lines
>lang.c lang_tab.h: lang.y $(HEADERS)
^^^^^^^^^^^^^^^^^^^
That's the source of your problem. (Explained below)
> bison -y -d lang.y
> update y_tab.c lang.c
> update y_tab.h lang_tab.h
>lang.o: lang.c
> ...
>Trouble is, make does a lot of redundant work: it runs bison twice and
>consequently recompiles lang.c twice too, for some reason that escapes me.
>Make was invented in order to avoid redundant compiles, but it appears to
>be adding to them here. What's going on? Is there something wrong with my
>makefile?
Yes, as pointed out above, there is something wrong: in a nutshell, you
should *never* have make build more than one file per rule. In the
case given above, I think this should be changed to something like:
y_tab.c: lang.y $(HEADERS)
bison -y -d lang.y
lang_tab.h: y_tab.c
update y_tab.h lang_tab.h
lang.c: y_tab.c
update y_tab.c lang.c
As to the use of update vs. copy/cp, I'm not really sure it is a
good choice here, but you'll find out about that yourself soon
enought, I guess.
And, as Eli already pointed out, using the default .y.c make rules
(with YACC=bison -y) might be a good idea as well
Hans-Bernhard Broeker (Aachen, Germany)
- Raw text -