Передача stdout и stderr в правило Makefile

Я хочу передать вывод скрипта в другую программу. Что-то, что я обычно делал бы, используя эти две формы:

 python test.py 2>&1 | pyrg
 python test.py |& pyrg

Моя проблема в том, что он не работает изнутри make файла:

[Makefile]
test:
    python test.py 2>&1 | pyrg [doesn't work]

Я хотел бы избежать написания файла сценария, который делает эту работу.

Редактировать:

Это похоже на проблему pyrg:

python test.py 2>&1 | tee test.out // Writes to the file both stderr and stdout
cat test.out | pyrg                // Works fine!
python test.py 2>&1 | pyrg         // pyrg behaves as if it got no input

Это плохое решение для меня, так как я никогда не доберусь до части cat в случае неудачи теста (все находится внутри правила Makefile)

Ответы

Ответ 1

Это не объясняет, почему простые подходы не работают, но это делает трюк:

[Makefile]
test: 
    python test.py >test.out 2>&1; pyrg <test.out

Ответ 2

Я наткнулся на этот вопрос с той же проблемой и не был удовлетворен ответом. У меня был двоичный TLBN, который не прошел в тестовом случае example2.TLBN.

Это первый файл моего файла.

make:
     ./TLBN example2.TLBN > ex2_output.txt

Что не удалось с сообщением об ошибке, которое я ожидал и остановил процесс make.

Это мое исправление:

make:
    -./TLBN example2.TLBN > ex2_output.txt 2>&1

Обратите внимание на - в начале строки, которая сообщает make игнорировать любой вывод в stderr.

Надеюсь, это поможет кому-то, у кого есть аналогичная проблема.