7
votes

Dans Makefile, comment nettoyer les fichiers Lockfile?

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.

merci! -Jeff xxx


2 commentaires

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!


3 Réponses :


0
votes

Vous voulez que le .Delete_on_error cible, ce qui vous permet de spécifier des fichiers à supprimer sur des erreurs.

http://www.gnu.org/s/ Bonjour / manuel / Make / Special-Targets.html

Modifier

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'à faire .


2 commentaires

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 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 verrou_id , mais le fichier que vous essayez de créer (et souhaitez supprimer) est foo.lock .



4
votes

C'est une sorte de kludge, mais cela fonctionne:

all:
        @$(MAKE) file.out || $(MAKE) unlock_id


1 commentaires

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



7
votes

Je ferais le verrouillage / déverrouillage dans la même cible que FILE-fabricant : xxx

ceci exécute le fabricant de fichier et déverrouillez les étapes dans la même coquille, enregistrez l'état du fabricant de fichiers SO .


0 commentaires