make ".if exists" problem/question
Giorgos Keramidas
keramida at freebsd.org
Thu Aug 25 18:46:22 GMT 2005
On 2005-08-25 20:36, Emanuel Strobl <Emanuel.strobl at gmx.net> wrote:
> Am Donnerstag, 25. August 2005 20:10 CEST schrieb David Kirchner:
> > This Makefile shows the problem:
> >
> > all:
> > .if ! exists(./foobar)
> > @echo foobar does not exist
> > .endif
> > touch foobar
> > .if ! exists(./foobar)
> > @echo foobar does not exist
> > .endif
> >
> > If you run make in this directory, and foobar does not already exist
> > beforehand:
> >
> > $ make
> > foobar does not exist
> > touch foobar
> > foobar does not exist
> >
> > Looking at the make source, it appears that it maintains a cache for
> > file lookups, and I don't see a way to have it flush the hash via some
> > makefile command. I dunno if it is a bug but the man page does not
> > mention a cache.
> >
> > I wonder if you'll have to start a separate make process for each
> > stage of that target's handling.
>
> Thanks for your suggestion, you described exactly what I mean. So if
> there's no way to flush the cache, it's IMHO a wrong behaviour and
> should be considered as bug. I'm not too experienced in make, so I
> don't know if I want to call sub makes... Do you have an idea whom to
> contact regarding the "bug"?
You can call a sub-make with the help of an ``auxiliary'' target:
% all: create-file show-file
%
% create-file:
% .if ! exists(./foobar)
% @echo foobar does not exist
% .endif
% touch foobar
%
% show-file:
% @$(MAKE) show-file-aux
%
% show-file-aux:
% .if ! exists(./foobar)
% @echo foobar does not exist
% .else
% @ls -l foobar
% .endif
This should result in something like this:
% orion:/tmp/foobar$ make
% foobar does not exist
% touch foobar
% -rw-rw-r-- 1 keramida wheel 0 Aug 25 21:44 foobar
% orion:/tmp/foobar$
More information about the freebsd-current
mailing list