help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

should make elide the difference between "dir" and "dir/"?


From: David Boyce
Subject: should make elide the difference between "dir" and "dir/"?
Date: Sun, 3 Oct 2021 13:50:12 -0700

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.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]