Запустить отсутствующие зависимости в (параллельном) GNU make путем изменения порядка выполнения - PullRequest
3 голосов
/ 25 февраля 2012

Предположим, у меня есть 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 выполнит обычно успешно, так как команды для a.out выполняются перед командами для b.out.Но make b.out потерпит неудачу (в чистом каталоге), как и make -j c.out.

Как и в реальных сценариях, редко встречается sleep 3, и ошибка, таким образом, будет отображаться очень случайно,ищу способ выкурить такие ошибки с большей вероятностью.Одна идея состояла бы в том, чтобы изменить порядок выполнения для целей «на том же уровне»: поскольку набор тестов обычно запускает первое поколение a.out, затем b.out, если вместо этого генерируется первый b.out, ошибка будетповерхность.

Есть ли способ в GNU make сделать это?

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Пол Смит ответил на help-make@gnu.org, что это невозможно с текущей версией GNU.

0 голосов
/ 11 апреля 2014

Единственное переупорядочение целевых зависимостей, которое с наибольшей вероятностью может выявить неустановленные зависимости между зависимостями цели, - это обратный порядок целевых зависимостей.

Обратный порядок можно получить, протестировав Makefile с условно выполненным разделом зависимостей, таким как:

a.out: b.out

Для более длинных списков зависимостей это будет:

a.out: b.out
b.out: d.out
d.out: e.out
:
:
...