Tim Landscheidt
Tim Landscheidt

Reputation: 1400

Trigger missing dependencies in (parallel) GNU make by changing order of execution

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

Answers (2)

Jonathan Ben-Avraham
Jonathan Ben-Avraham

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

Tim Landscheidt
Tim Landscheidt

Reputation: 1400

Paul Smith replied on [email protected] that this is not possible with current GNU make.

Upvotes: 2

Related Questions