Reputation: 1400
Suppose I have a Makefile:
a.out:
sleep 3
touch a.out a1
b.out:
cat a1 > b.out
c.out: a.out b.out
cat a.out b.out > c.out
make c.out
will usually succeed, as the commands for a.out are executed before the commands for b.out. But make b.out
will fail (in a clean directory), as will make -j c.out
.
As in real-life scenarios there is seldomly a sleep 3
and the bug will thus only show very randomly, I'm looking for a way to smoke out such errors with a higher probability. One idea would be to reverse the order of execution for targets "on the same level": As the test suite will usually trigger first generation of a.out, then b.out, if instead first b.out was generated, the bug would surface.
Is there a way in GNU make to do this?
Upvotes: 3
Views: 420
Reputation: 4821
The single re-ordering of the target dependencies that is most likely to reveal unstated dependencies between the dependencies of a target is the reverse ordering of the target dependencies.
You can achieve the reverse ordering by testing the Makefile
with a conditionally executed dependency section such as:
a.out: b.out
For longer dependency lists this would be:
a.out: b.out
b.out: d.out
d.out: e.out
:
:
Upvotes: 0
Reputation: 1400
Paul Smith replied on [email protected] that this is not possible with current GNU make.
Upvotes: 2