make ".if exists" problem/question

Emanuel Strobl Emanuel.strobl at
Thu Aug 25 18:37:12 GMT 2005

Am Donnerstag, 25. August 2005 20:10 CEST schrieb David Kirchner:
> On 8/25/05, Emanuel Strobl <Emanuel.strobl at> wrote:
> > Dear make gurus (bsd make, not gmake),
> >
> > it seems that make checks .if directives only at statrup. How can I
> > trigger a "reread"?
> > I have the problem that in one target I create a filetree, another
> > target checks if it exists, if not it creates itself again. Now it
> > works perfectly when I call the two targets both externally
> > (installcfworld installcfconfig) but when the internal higher
> > "install" gets to the installcfconfig target it fails!
> > I'm really desperate, I need to check this. Is this a nasty bug?
> 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 
Do you have an idea whom to contact regarding the "bug"?


-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url :

More information about the freebsd-current mailing list