[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
undesirable .out rule
From: |
Bruno Haible |
Subject: |
undesirable .out rule |
Date: |
Mon, 12 Nov 2001 13:19:41 +0100 (CET) |
Hi,
GNU make 3.79.1 apparently contains a pattern rule "%.out : % ; ..."
which has some undesirable side effects. You can observe it as follows:
- unpack ftp://alpha.gnu.org/gnu/gettext/gettext-0.11-pre1.tar.gz,
- make a VPATH build:
$ cd gettext-0.11-pre1
$ mkdir build
$ cd build
$ ../configure
$ make
- make a distribution package:
$ make dist
You will observe that the created distribution contains a tests/msguniq-1.out
file which differs from the one in the source. During the "make dist" a
dependency of 'distdir' on 'msguniq-1.out' has caused the following command
to be executed:
cp ../../tests/msguniq-1 msguniq-1.out
Both 'msguniq-1' and 'msguniq-1.out' exist in the source directory ../../tests,
and 'msguniq-1.out' is older than 'msguniq-1'. This has apparently triggered
the implicit rule.
I'd like to ask to remove this misfeature rule from GNU make because
1) It is undocumented. The "make" documentation (node "Catalogue of Implicit
Rules") doesn't mention this pattern rule. It only mentions the .out
suffix, but the tests/Makefile redefines the suffix list anyway.
2) It cannot be turned off in a portable way. Node "Canceling Implicit Rules"
recommends redefining the same pattern rule with no commands. But
since pattern rules are not portable (see SUSV2 "make" documentation),
I cannot do that in a portable Makefile.
3) Compared to the rationale of the rule, namely the ability to write
rules like
.out.symlist :
nm $< > $@
which create 'foo,symlist' from 'foo', its implementation is gross:
it copies the complete executable file. This is a case where pattern
rules are needed.
Bruno
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- undesirable .out rule,
Bruno Haible <=