Сбой make-файла при использовании diff для разных файлов - PullRequest
7 голосов
/ 11 марта 2012

Часть моего make-файла для моего C ++ проекта использует команду diff для сравнения двух файлов, которые были выведены недавно созданным кодом.Проблема в том, что если файлы разные, то скрипт у вас не выйдет и должен продолжаться.Есть еще файлы, которые нужно сравнить, и мне нужно увидеть их все, прежде чем закончится сценарий сборки.Например, что-то вроде этого:

diff:   *
        diff $(TEST)/T4.board $(TEST)/T4.board
        diff $(TEST)/T4.board $(TEST)/sample.board

Первая строка не вызывает проблем, потому что файлы одинаковы.Во второй строке сравниваются разные файлы, и как только различия отображаются, я вижу

Makefile:102: recipe for target `diff' failed
make: *** [diff] Error 1

и сценарий останавливается.Как я могу заставить его продолжить?

Ответы [ 2 ]

7 голосов
/ 11 марта 2012

Поскольку GNU делает ручные состояния в разделе 5.5 «Ошибки» , вы можете игнорировать возвращаемый статус команды, добавив к ней префикс -:

diff:   *
    -diff $(TEST)/T4.board $(TEST)/T4.board
    -diff $(TEST)/T4.board $(TEST)/sample.board
6 голосов
/ 11 марта 2012

Составьте весь свой рецепт, чтобы не было ошибок:

diff:   *
    diff $(TEST)/T4.board $(TEST)/T4.board     || exit 0
    diff $(TEST)/T4.board $(TEST)/sample.board || exit 0

Можно использовать echo 'Files differ' вместо exit 0.

...