It's documented that make implements a special case to treat pathnames "foobar" and "./foobar" as identical even though comparisons are usually lexical, but I notice that it doesn't do the same with trailing slashes on directory names. For instance in the test case below the target depends on its parent directory $(@D) which comes out as "foo". We've supplied a rule for making it but due to the behavior of the $(dir ...) function that comes out as "foo/" which doesn't match. This can be "fixed" with the patsubst function but life would be more convenient and less mysterious if make recognized them as the same. Has this been considered in the past?
The obvious concern is that we don't know a priori whether a target is a directory or file. However, since "foo/" is illegal for anything but a directory it seems harmless to assume directory. This matching could also be made to apply exclusively to order-only prerequisites which is where directories should be anyway. David $ cat Makefile .SECONDEXPANSION: target := foo/bar $(target): $$(@D) touch $@ $(dir $(target)): mkdir -p $@ $ make make: *** No rule to make target 'foo', needed by 'foo/bar'. Stop.