all: $(addprefix target,1 2 3 4 5 6 7 8 9 10)
    @echo glob: $(wildcard target*)

target%:
    touch $@

To wit:

$ make
touch target1
touch target2
touch target3
touch target4
touch target5
touch target6
touch target7
touch target8
touch target9
touch target10
glob:
$ make
glob: target10 target3 target8 target7 target6 target5 target1 target2
target9 target4

This is not a weird or contrived use case: this is wildcard not finding
targets in a recipe executed after they've been built as explicit
prerequisites.

I understand the performance argument in favor of caching, but the existing
behavior is incorrect and entirely counter to expectations: no one writing
a makefile wants or expects wildcard to behave this way. $(shell echo
target*) is a fine workaround for now, but it's frankly inane to have to do
that. I spent several hours tracking down the problem here, time that
likely exceeds years of builds with some extra readdirs.

Why not refresh the cache when the directory's mtime has changed?

Kyle
_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to