web-dev-qa-db-fra.com

Comment faire GNU faire explicitement un test d'échec?

Après des années à ne pas utiliser make, je me retrouve à en avoir besoin à nouveau, la version gnu maintenant. Je suis presque sûr que je devrais pouvoir faire ce que je veux, mais je n'ai pas compris comment, ni trouvé de réponse avec Google, etc.

J'essaie de créer une cible de test qui exécutera mon programme plusieurs fois, en enregistrant les résultats dans un fichier journal. Certains tests devraient entraîner l'abandon de mon programme. Malheureusement, mon makefile s'interrompt lors du premier test ce qui entraîne une erreur. J'ai quelque chose comme:

# 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

Avec ce qui précède, effectuez des fermetures après l'exécution de bad_input1, sans jamais accéder à l'exécution de bad_input2.

62
GreenMatt

La bonne solution si vous souhaitez exiger l'échec de la cible consiste à annuler son code de sortie.

# 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

Maintenant, c'est une erreur de réussir dans ces deux cas.

16
tripleee

Mettez un - avant la commande, par exemple:

-myProg bad_input >> test.log

GNU make ignorera alors le code de sortie du processus.

120
please delete me

Essayez de l'exécuter en tant que

make -i

ou

make --ignore-errors

qui ignore toutes les erreurs dans toutes les règles .

Je suggère également de l'exécuter en tant que

make -i 2>&1 | tee results

afin que vous obteniez toutes les erreurs et les sorties pour voir ce qui s'est passé.

Continuer aveuglément après une erreur n'est probablement pas ce que vous voulez vraiment faire. L'utilitaire make, de par sa nature même, repose généralement sur la réussite des commandes précédentes afin de pouvoir utiliser les artefacts de ces commandes comme pré-requis pour les commandes à exécuter ultérieurement.

BTW Je recommande fortement d'obtenir une copie de le livre O'Reilly sur make . La première édition a un excellent aperçu de la nature de base de la marque, en particulier son comportement de chaînage en arrière. Les éditions ultérieures sont toujours bonnes, mais la première édition. a toujours l'explication la plus claire de ce qui se passe réellement. En fait, ma propre copie est la première chose que je passe aux gens qui viennent me poser des questions "WTF?" Sur make! (-:

30
Rob Wells