La commande $ make all
donne des erreurs telles que rm: cannot remove '.lambda': No such file or directory
donc ça s'arrête. Je veux qu'il ignore les erreurs rm-not-found-. 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
Essaie le -i
drapeau (ou --ignore-errors
). La documentation semble suggérer un moyen plus robuste d'y parvenir:
Pour ignorer les erreurs dans une ligne de commande, écrivez un
-
au début du texte de la ligne (après la tabulation initiale). Le-
est ignoré avant que la commande ne soit transmise au shell pour exécution.Par exemple,
clean: -rm -f *.o
Ceci entraîne la poursuite de
rm
même s'il est impossible de supprimer un fichier.
Tous les exemples concernent rm
, mais s’appliquent à toute autre commande dont vous devez ignorer les erreurs (par exemple, mkdir
).
make -k
(ou --keep-going
sur gnumake) fera ce que vous demandez, je pense.
Vous devez vraiment trouver la ligne del ou rm qui échoue et ajouter un -f
pour empêcher cette erreur d’arriver à d’autres.
Changer propre à
rm -f .lambda .lambda_t .activity .activity_t_lambda
C'est à dire. ne pas demander pour supprimer; 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 y ajouter le suffixe ; 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 redirigera la sortie de stderr vers null et suivra la commande avec true (qui renvoie toujours 0, laissant croire à la réussite de la commande, peu importe ce qui s'est réellement passé), permettant ainsi au flux de programme de continuer.
Retournez 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 que rm
ne se plaint pas:
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