Подтвердить что ты не робот

Как заставить GNU явно протестировать ошибку?

После многих лет, когда я не использовал make, я снова нуждаюсь в этом, версии gnu. Я уверен, что смогу сделать то, что хочу, но не понял, как, или нашел ответ с Google и т.д.

Я пытаюсь создать тестовый объект, который будет выполнять мою программу несколько раз, сохраняя результаты в файле журнала. Некоторые тесты должны привести к прерыванию моей программы. К сожалению, мой makefile прерывается при первом тесте, что приводит к ошибке. У меня есть что-то вроде:

# Makefile
# 
test:
        myProg -h > test.log              # Display help
        myProg good_input >> test.log     # should run fine
        myProg bad_input1 >> test.log      # Error 1
        myProg bad_input2 >> test.log      # Error 2

С вышесказанным сделайте завершение работы после прогона bad_input1, никогда не дойдя до запуска bad_input2.

4b9b3361

Ответ 1

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

# Makefile
# 
test:
    myProg -h > test.log              # Display help
    myProg good_input >> test.log     # should run fine
    ! myProg bad_input1 >> test.log      # Error 1
    ! myProg bad_input2 >> test.log      # Error 2

Теперь в этих двух случаях будет ошибкой.

Ответ 2

Поместите a - перед командой, например:

-myProg bad_input >> test.log

GNU make будет игнорировать код выхода процесса.

Ответ 3

Попробуйте запустить его как

make -i

или

make --ignore-errors

который игнорирует все ошибки в всех правилах.

Я также предлагаю запустить его как

make -i 2>&1 | tee results

чтобы вы получили все ошибки и вывод, чтобы узнать, что произошло.

Просто слепо продолжая после ошибки, вероятно, не то, что вы действительно хотите сделать. Утилита make по самой своей природе обычно полагается на успешное завершение предыдущих команд, так что она может использовать артефакты этих команд в качестве предварительных условий для команд, которые будут выполнены позже.

BTW Я бы высоко рекомендую получить копию