Summary: wildcard function does not return newly created file
Submitted by: None
Submitted on: Sun 19 Jan 2014 04:12:03 AM UTC
Severity: 3 - Normal
Item Group: Bug
Assigned to: None
Discussion Lock: Any
Component Version: 3.81
Operating System: MS Windows
Fixed Release: None
Triage Status: None
Using a simple makefile under Windows 7, it became apparent that the wildcard
function does not reflect the existence of a library created when the first
object was added to it.
This is make 3.81, as downloaded from gnuwin32:
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
This program built for i386-pc-mingw32
The attached listing shows both the GNUmakefile, and the resulting output
showing that $(wildcard ll.lib) does not recognize the existence of the
library after it was created.
However, my workaround $(mywildcard) gives the correct results one would
expect from the wildcard function. This is consistent with the mention that a
cache is probably used to avoid actually checking the filesystem and can
therefore cause inconsistent results. Curiously, repeated tests showed that
occasionally the wildcard function would begin showing the existence of the
library file in the middle of building and adding the eight object files. But
usually it would not recognize the file until the make was run a second time.
[bug #41273] wildcard function does not return newly created file
Follow-up Comment #1, bug #41273 (project make):
This is a function make's internal directory caching mechanism. The wildcard
function looks through the internal cache (where it exists) not the local
filesystem, which means that if there are rules that create files make doesn't
know about (e.g., ones that didn't exist when make started and are not listed
as targets of the recipes make runs) then they may not show up in the results
of the wildcard function.
We need to either find a way to keep all or most of the benefits of the cache
without causing these problems (maybe find a better way to invalidate the
cache?), or else allow the user to disable it when they want to write
"questionable" makefiles that assume no caching.