#makefile
#makefile
Вопрос:
У меня есть Makefile, который запускает программу, которая при успешном выполнении возвращает ненулевое значение, а при сбое возвращает другое ненулевое значение. Я знаю, что могу игнорировать статус завершения, добавляя к команде префикс — , но это не работает, потому что мне нужно знать, выполнена ли команда успешно.
Комментарии:
1. Первый шаг — отправить сопровождающему программы отчет об ошибке, который возвращает ненулевое значение при успешном выполнении.
2. Ну, программа от коммерческого поставщика, поэтому я сомневаюсь, что они изменят поведение программы.
3. @trondd GNU make разработан проектом GNU, который не является коммерческим. Все наоборот: это свободное программное обеспечение.
4. Программа, выполняемая из Makefile, является собственностью, а не GNU Make.
Ответ №1:
Вы можете проверить возвращаемое значение второй командой в той же строке Makefile, используя $?
переменную оболочки, которая содержит последнее возвращенное значение.
Например, с помощью false
команды, которая, очевидно, остановила бы компиляцию:
test:
/bin/false ; /usr/bin/test "$$?" -eq 1 # <-- make does not stop here
/bin/echo "Continues ..."
/bin/false # <-- make stops here
Ответ №2:
Использовать
command || [ $$? -eq v ]
в качестве вашей команды замените command на command, а v на значение, возвращаемое при успешном выполнении.
(Это просто более компактная версия ответа Дидье Троссе.)
Комментарии:
1. Это не будет работать как есть в makefile, потому что
$?
будет интерпретироваться в соответствии с определениями переменных make. Вместо этого вам нужно использовать$$?
.2. По сравнению с ответом Дидье Троссе, этот ответ также пройдет, когда команда вернется со статусом 0 (в моем случае это не то, что я хотел)!
3. @Vitaly Polonetsky: Я предполагал, что tertium не является datur . Вы можете настроить его так, как вам нравится.
Ответ №3:
В зависимости от того, как инструмент ведет себя при сбое, вы могли бы просто проверить наличие выходного файла. что-то вроде:
@if test ! -f $(FILE); then exit 2; fi