URL:
<https://savannah.gnu.org/bugs/?60188>
Summary: Explicit file built by an implicit rule is not
intermediate.
Project: make
Submitted by: dgoncharov
Submitted on: Sun 07 Mar 2021 07:02:23 PM UTC
Severity: 3 - Normal
Item Group: Bug
Status: None
Privacy: Public
Assigned to: None
Open/Closed: Open
Discussion Lock: Any
Component Version: SCM
Operating System: None
Fixed Release: None
Triage Status: None
_______________________________________________________
Details:
Make incorrectly considers an explicit file built by an implicit rule as
intermediate.
$ cat makefile
%.z: test.x
touch $@
%.x: ;
$ touch hello.z
$ rm test.x
rm: cannot remove 'test.x': No such file or directory
$ make hello.z
make: 'hello.z' is up to date.
This is the relevant part of make -d output
Considering target file 'hello.z'.
Looking for an implicit rule for 'hello.z'.
Trying pattern rule with stem 'hello'.
Trying rule prerequisite 'test.x'.
Trying pattern rule with stem 'hello'.
Trying rule prerequisite 'test.x'.
Looking for a rule with intermediate file 'test.x'.
Avoiding implicit rule recursion.
Trying pattern rule with stem 'test'.
Found an implicit rule for 'hello.z'.
Finished prerequisites of target file 'hello.z'.
Prerequisite 'test.x' of target 'hello.z' does not exist.
No need to remake target 'hello.z'.
make considers test.x an intermediate and does not build hello.z.
test.x should not be considered intermediate, because test.x is explicitly
mentioned.
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/bugs/?60188>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/