62 votes

Comment avoir de gnu make continuer après une erreur?

Après des années de ne pas utiliser, je me retrouve à avoir besoin d'elle encore une fois, la version gnu maintenant. Je suis assez sûr que je devrais être en mesure de faire ce que je veux, mais je n'ai pas compris comment, ou trouvé une réponse avec Google, etc.

Je suis en train de créer une cible de test qui va exécuter mon programme un certain nombre de fois, d'enregistrer les résultats dans un fichier journal. Certains tests doivent la cause de mon programme pour l'abandonner. Malheureusement, mon makefile abandonne sur le premier essai, ce qui conduit à 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

Ci-dessus, faire se ferme après la bad_input1 exécuter, de ne jamais arriver à la bad_input2 exécuter.

30voto

Rob Wells Points 21714

Essayer de l'exécuter en tant que

make -i

ou

make --ignore-errors

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

Je voudrais aussi suggérer l'exécuter en tant que

make -i 2>&1 | tee results

de sorte que vous avez obtenu toutes les erreurs et la sortie pour voir ce qui s'est passé.

Seulement aveuglément poursuivre après une erreur est probablement pas ce que vous êtes vraiment désireux de faire. L'utilitaire make, de par sa nature même, est généralement en s'appuyant sur la réussite de commandes précédentes, de sorte qu'il peut utiliser les objets de ces commandes en tant que pré-requis pour les commandes à exécuter plus tard.

BTW j'avais fortement conseillé d'obtenir une copie de l'O'Reilly livre sur faire. La première édition a une excellente vue d'ensemble de la nature fondamentale de faire, en particulier de son arrière chaînage. Les éditions ultérieures sont encore bonnes, mais la première ed. toujours a l'explication la plus claire de ce qui se passe réellement. En fait, ma propre copie est la première chose que je dois passer pour les gens qui viennent me demander "WTF? les questions" à propos de faire de la! (-:

16voto

tripleee Points 28746

La bonne solution si vous voulez avoir besoin de la cible à l'échec est de nier 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.

-1voto

Lars Points 943

Comme brone dit. Des informations supplémentaires peuvent être trouvées dans le GNU Make manuel:

www.gnu.org/software/make/manual/make.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X