dans GNU FAIT 3.81, je dois supprimer un verrouillage en cas d'erreur dans n'importe quelle partie de la boîte à outils. Y a-t-il une cible spéciale qui me permettra de faire cela? Dois-je écrire un script wrapper?
Dans l'exemple ci-dessous, j'ai besoin de déverrouiller pour arriver si la règle de fichier.out échoue. P>
merci!
-Jeff p>
3 Réponses :
Vous voulez que le http://www.gnu.org/s/ Bonjour / manuel / Make / Special-Targets.html P>
Mon mauvais, c'est une demi-vérité. Il vous permet de spécifier que vous souhaitez que les fichiers soient supprimés, mais comme pour lesquels et dans quelles circonstances, c'est jusqu'à .Delete_on_error code> cible, ce qui vous permet de spécifier des fichiers à supprimer sur des erreurs. P>
faire code>. P>
Bonjour Chris, j'ai un .delete_on_error, mais la documentation indique qu'il fonctionne différemment. On dirait que cela supprimera $ @ si la cible respective échoue, pour toutes les cibles du maquillage. Cela étant dit, je n'ai jamais vraiment eu le comportement de .delete_on_error de travailler comme prévu ... ".Delete_on_error si .Delete_on_error est mentionné comme une cible n'importe où dans le matrice, puis apportera la cible d'une règle si elle a changé et sa La recette sort avec un statut de sortie non zéro, comme il le fait lorsqu'il reçoit un signal. Voir les erreurs dans les recettes. " Merci! -Jeff
@Jeff: .Delete_on_error code> fonctionne pour moi (gnumake 3.81), mais uniquement si le nom de la cible est le nom du fichier. Dans votre cas, il semble que le nom de la cible est code> verrou_id code>, mais le fichier que vous essayez de créer (et souhaitez supprimer) est
foo.lock code>.
C'est une sorte de kludge, mais cela fonctionne:
all: @$(MAKE) file.out || $(MAKE) unlock_id
Vous pouvez également spamner cela après toutes les commandes pouvant échouer comme alternative à la solution globale de la bêta. ./ CommandThatMightFail.sh || $ (Make) déverrouiller_id code>
Je ferais le verrouillage / déverrouillage dans la même cible que ceci exécute le fabricant de fichier FILE-fabricant code>:
code> et déverrouillez les étapes dans la même coquille, enregistrez l'état du fabricant de fichiers code> SO code>. p>
Une erreur dans une commande particulière, ou une erreur n'importe où dans le processus de fabrication?
Bonjour Beta, j'ai mis à jour la question avec plus de détails. Merci!