Make: comment continuer après l’échec d’une commande?

La commande $ make all donne des erreurs telles que rm: cannot remove '.lambda': No such file or directory ce type ne s’arrête. Je veux qu’il ignore les erreurs-not-found-errors. Comment puis-je forcer?

Makefile

 all: make clean make .lambda make .lambda_t make .activity make .activity_t_lambda clean: rm .lambda .lambda_t .activity .activity_t_lambda .lambda: awk '{printf "%.4f \n", log(2)/log(2.71828183)/$$1}' t_year > .lambda .lambda_t: paste .lambda t_year > .lambda_t .activity: awk '{printf "%.4f \n", $$1*2.71828183^(-$$1*$$2)}' .lambda_t > .activity .activity_t_lambda: paste .activity t_year .lambda | sed -e 's@\t@\t\&\t@g' -e 's@$$@\t\\\\@g' | tee > .activity_t_lambda > ../RESULTS/currentActivity.tex 

Essayez le drapeau -i (ou --ignore-errors ). La documentation semble suggérer un moyen plus robuste d’y parvenir, soit dit en passant:

Pour ignorer les erreurs dans une ligne de commande, écrivez a - au début du texte de la ligne (après l’onglet initial). Le - est ignoré avant que la commande ne soit transmise au shell pour exécution.

Par exemple,

 clean: -rm -f *.o 

Cela provoque la poursuite de la rm de données même s’il est impossible de supprimer un fichier.

Tous les exemples sont avec rm , mais sont applicables à toute autre commande dont vous avez besoin pour ignorer les erreurs (par exemple, mkdir ).

Je pense que make -k (ou – --keep-going on gnumake) fera ce que vous demandez.

Vous devriez vraiment trouver la ligne del ou r qui échoue et lui append un -f pour éviter que cette erreur n’arrive à d’autres.

Changer propre à

 rm -f .lambda .lambda_t .activity .activity_t_lambda 

Ie ne demande pas d’enlever; ne vous plaignez pas si le fichier n’existe pas.

Pour que make ignore réellement les erreurs sur une seule ligne, vous pouvez simplement le suffixer avec ; true ; true , en définissant la valeur de retour sur 0. Par exemple:

 rm .lambda .lambda_t .activity .activity_t_lambda 2>/dev/null; true 

Cela redirecta la sortie de stderr vers null et suivra la commande avec true (qui retourne toujours 0, ce qui amène make à croire que la commande a réussi indépendamment de ce qui s’est réellement passé), permettant au stream de programme de continuer.

Retourner avec succès en bloquant le code retour de rm derrière un tube avec la commande true , qui renvoie toujours 0 (succès)

 rm file | true 

Changez votre clean pour ne pas vous plaindre:

 clean: rm -f .lambda .lambda_t .activity .activity_t_lambda 

Mettez une option -f dans votre commande rm .

 rm -f .lambda .lambda_t .activity .activity_t_lambda