My earlier example makefile did not emphasize the fact that information should be obtained when target is invoked. Here is as better example:
SRC_DIR = ./ PROG_NAME = test define PROGRAM_template $(1)_SRC_DIR = $$(SRC_DIR) $(1)_SRC_FILES = $$(wildcard $$($(1)_SRC_DIR)*.c) endef clean: del hello.c all: $(eval $(call PROGRAM_template,$(PROG_NAME))) rem $(test_SRC_DIR) rem $(test_SRC_FILES) rem $(wildcard $(test_SRC_DIR)*.c) The change is where the $(eval) is located. Identical results are obtained as before. So the issue is probably not when GNU/Linux renews the cache $(eval), but when Windows/Make refresh/update the cache. Thanks, SC Hsu -----Original Message----- From: Eli Zaretskii [mailto:e...@gnu.org] Sent: Saturday, January 08, 2011 4:35 AM To: psm...@gnu.org Cc: Hsu, Shihchieh IAS; bug-make@gnu.org Subject: Re: Using $(eval) to get information at the time a target is invoked > From: Paul Smith <psm...@gnu.org> > Date: Fri, 07 Jan 2011 21:58:53 -0500 > Cc: bug-make@gnu.org > > I realize that maybe this doesn't matter on Windows where the filesystem > is not case-sensitive, but of course on Linux if you delete "hello.c" > that won't have any impact on "Hello.c" which is why "Hello.c" still > exists after the "rm". > > In your second example, with the subdirectory, you get the cases the > same: > > > A makefile (makefile_sav) looking for files under a subfolder <test> > > works: (<test> contains hello.c and world.c files) > > > > clean: > > del test\hello.c > > and it works. I don't know enough about Windows to say if this case > difference really matters, but you might try that. No, it doesn't matter. The _real_ difference (one that is not easy to arrive at, reading just the text of the report) is that in the first example, Make is invoked from _within_ the `test' directory, while in the second example, it is invoked from the _parent_ of `test'. > Please post a message on the make-...@gnu.org mailing list if you can't > figure it out: the folks on that list are a lot more knowledgeable about > make running on DOS/Windows platforms. No need, for the moment: I can reproduce the problem with the Windows build of Make 3.82. But I wonder if this is really Windows-specific. Could this be the example you asked for in Savannah bug#443 and #14617 (which was hoped to be solved in bug#21231)? Can you tell me what causes Make to renew the cache used by $(wildcard) on GNU/Linux? I could then try to see why it does not happen on Windows in this case. _______________________________________________ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make