2017-10-17 41 views
1

considérant ce qui suit:Comment faire peut restaurer l'état après l'échec

all: 
    mv info.h info.h.back 
    generate_info.sh 
    compile 
    mv info.h.back info.h 

Comment puis-je faire la force d'exécuter la dernière ligne, même si la compilation a échoué?

Je suis au courant de .DELETE_ON_ERROR mais cela ne concerne que la suppression des cibles en cas de panne.

Je suis également conscient de l'option d'ajouter - avant la commande de compilation. Malheureusement, cela fera revenir le tout avec un bon code d'erreur, ce qui est inacceptable.

Répondre

2

Vous ne pouvez pas forcer à faire cela. Vous devrez vous organiser pour que cela soit fait dans votre script shell, vous-même. Make enverra chaque "ligne logique" du script shell à la même commande shell. Transformez plusieurs lignes physiques en une ligne logique en ajoutant des barres obliques inverses à la fin des lignes physiques.

Ainsi, par exemple:

all: 
    mv info.h info.h.back 
    generate_info.sh && compile; \ 
    r=$$?; mv info.h.back info.h; \ 
    exit $$r 

Ceci enregistre le code de retour des deux commandes dans la variable shell r, puis exécute la commande mv, puis quitte le shell avec le code de résultat qui a été enregistré.

Le generate_info.sh && compile signifie que la deuxième commande (compile) ne s'exécutera que si la première commande (generate_info.sh) aboutit.