Jak zmusić GNU do jawnego testowania błędów?

Po latach nieużywania make, ponownie potrzebuję go, teraz wersji gnu. Jestem prawie pewien, że powinienem być w stanie zrobić to, co chcę, ale nie wiem, jak, lub znaleźć odpowiedź z Google, itp.

Próbuję stworzyć testowy cel, który uruchomi mój program kilka razy, zapisując wyniki w pliku dziennika. Niektóre testy powinny spowodować przerwanie programu. Niestety mój plik makefile przerywa pierwszy test, co prowadzi do błędu. Mam coś. like:

# 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

Z powyższym, wykonaj quits po uruchomieniu bad_input1, nigdy nie dostając się do uruchomienia bad_input2.

Author: JBRWilkinson, 2010-02-03

3 answers

Właściwym rozwiązaniem, jeśli chcesz, aby cel nie powiódł się, jest zanegowanie kodu wyjścia.

# 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
W tych dwóch przypadkach błędem jest odnieść sukces.
 16
Author: tripleee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-21 13:24:28

Umieść - przed poleceniem, np.:

-myProg bad_input >> test.log

GNU make zignoruje kod zakończenia procesu.

 120
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-02 22:53:15

Spróbuj uruchomić go jako

make -i

Lub

make --ignore-errors

Który ignoruje wszystkie błędy wwszystkich regułach.

Sugerowałbym również uruchomienie go jako

make -i 2>&1 | tee results

Tak, że masz wszystkie błędy i wyjście, aby zobaczyć, co się stało.

Po prostu ślepe kontynuowanie po błędzie prawdopodobnie nie jest tym, co naprawdę chcesz zrobić. Narzędzie make, ze swej natury, polega zwykle na pomyślnym wykonaniu poprzednich poleceń, dzięki czemu może używać artefaktów tych poleceń jako wymagania wstępne dla poleceń, które mają być wykonywane później.

BTW ja bym wysoce zalecał zdobycie kopii książki O ' Reilly na make. Pierwsza edycja ma doskonały przegląd podstawowej natury marki, a w szczególności jej wstecznego zachowania łańcucha. Późniejsze wydania są nadal dobre, ale pierwsza edycja. nadal ma najjaśniejsze wyjaśnienie tego, co się dzieje. W rzeczywistości, moja własna kopia jest pierwszą rzeczą, którą przekazuję ludziom, którzy przychodzą do mnie, aby zapytać " WTF? pytania " o make! (-:

 30
Author: Rob Wells,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-25 09:20:56