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.
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.
Mettez un -
avant la commande, par exemple:
-myProg bad_input >> test.log
GNU make ignorera alors le code de sortie du processus.
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! (-: