[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: ignore specific file in VPATH/vpath
From: |
Jannick |
Subject: |
RE: ignore specific file in VPATH/vpath |
Date: |
Thu, 10 May 2018 10:30:03 +0200 |
I figured out another solution: If make cannot distinguish the two generated
files ../parse.c and parse.c from each other, then the makefile could do
that by labelling parse.c, i.e. using a prefix (here: 'g-' for generated);
use g-parse.c instead of parse.c. This definitely routes the building path
of parse.y through the corresponding .c file built *in* the folder 'build'.
This is at the expense to have an explicit rule for .y files which is -
AFAICS - currently needed anyways, since the built-in YACC rule breaks with
bison >= 3.0 (at least); more as to why please see below.
src_dir = ../src
prog: prog.o g-parse.o
g-%.c: %.y
bison -o $@ $<
# solution 1
VPATH = $(src_dir)
# solution 2
#vpath %.y $(src_dir)
#vpath %.c $(src_dir)
Nonetheless, I would be still interested in other sweet and short solutions.
Thanks,
J.
On Wed, 9 May 2018 14:30:15 +0200, Jannick wrote:
> Hey,
>
> I am having an issue with the make vpath/VPATH configuration where make
> should ignore a specific existing file in vpath/VPATH. Here my case for
which
> any input from you is highly appreciated:
>
> Cd'ed to the folder 'build', the objective is to build prog with the
source files
> prog.c and parse.y, both sitting in 'src':
>
> +---build
> | makefile
> |
> \---src
> parse.c <<< disregard for a build in folder 'build'
> parse.y
> prog.c
>
> The nasty thing is src/parse.c which unfortunately does exist, but should
be
> ignored for our project, since build/parse.c should be separately build
(from
> parse.y) and used instead.
>
> Currently, I am not able - in an elegant way - to avoid that make uses
> src/parse.c, unless make -B. The following makefile does the job, but it
is not
> very elegant to set up a vpath statement for each .c source file (this is
just a
> tiny example, in real life there might be many of those required).
>
> $ cat makefile
>
> src_dir = ../src
> prog: prog.o parse.o
> %.c: %.y
> bison -o $@ $<
>
> # vpath statement for each .c source file, not very elegant
> vpath %.y $(src_dir)
> vpath prog.c $(src_dir)
>
> Alternatives:
> 1 - Using VPATH = $(src_dir) instead of the vpath block does not work,
since
> then make uses src/parse.c unless make -B.
> 2 - Another solution could be to copy the source files to build and take
it
> from there.
> 3 - My question: Is there any (easy) tweak to the makefile above (without
the
> given vpath block) to make that happen - or should be a copy to build
folder
> & compile method applied or something else I was not thinking of?
>
>
> Separately, an additional note: make's YACC built-in recipe
>
> %.c: %.y
> # recipe to execute (built-in):
> $(YACC.y) $<
> mv -f y.tab.c $@
>
> appears to assume that YACC/bison's output file name defaults to y.tab.c.
> However, it is $*.tab.c for bison >= 3.0 (at least). Would that be worth
an
> enhancement to make to update to the new built-in recipe? Here I am not
> sure which versions of yacc are out there and what their output files are
> named.
>
> Many thanks for any input!
>
> Regards,
> J.
>
> Signatures:
> - GNU Make 4.2.1; Built for i686-pc-cygwin
> - bison (GNU Bison) 3.0.4