it-swarm-eu.dev

Où puis-je trouver une liste de codes d'erreur «make»?

J'essaye de compiler un programme écrit en Fortran en utilisant make (j'ai un Makefile et, tandis que dans le répertoire contenant le Makefile , je tape la commande $ make target, où "cible" est une spécification de cible spécifique au système est présente dans mon Makefile . Lorsque j'expérimente différentes révisions de ma spécification cible, j'obtiens souvent une variété de messages d'erreur lorsque j'essaie d'appeler make. Pour donner quelques exemples:

make[1]: Entering directory
/bin/sh: line 0: test: too many arguments
./dpp   angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory
make: *** [cmu60] Error 2

et

make[1]: Entering directory
/bin/sh: line 0: test: too many arguments
./dpp -DSTRESS -DMPI -P -D'pointer=integer'-I/opt/mpich_intel/include  angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory 
make: *** [mpich-c2] Error 2

et

make[1]: Entering directory 
/bin/sh: line 0: test: too many arguments
./dpp -DSTRESS -DMPI -P -D'pointer=integer' -I/opt/mpich_intel/include  angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory 
make: *** [mpi-intel] Error 2

Savez-vous comment trouver une liste de la signification des codes d'erreur, tels que "Erreur 126" et "Erreur 2"? J'ai trouvé ce fil sur un autre site Web, mais je ne sais pas ce que signifie la réponse. Cela signifie-t-il qu'il n'y a pas de signification indépendante du système des codes d'erreur make? Pouvez-vous m'aider s'il vous plaît? Je vous remercie.

27
Andrew

Les codes d'erreur ne proviennent pas de make: make signale l'état de retour de la commande qui a échoué. Vous devez consulter la documentation de chaque commande pour savoir ce que signifie chaque valeur d'état. La plupart des commandes ne se soucient pas des distinctions autres que 0 = succès, quoi que ce soit d'autre = échec.

Dans chacun de vos exemples, ./dpp ne peut pas être exécuté. Lorsque cela se produit, le shell qui a tenté de l'appeler se ferme avec le code d'état 126 (c'est comportement standard ). L'instance de make en cours d'exécution que Shell détecte une commande ayant échoué (le Shell) et se termine, vous montrant Error 126. Cette instance de make est elle-même une commande exécutée par une instance parent de make, et l'utilitaire make renvoie 2 en cas d'erreur, donc le parent fait des rapports Error 2.

L'échec de votre build est probablement dû à test: too many arguments. Cela peut être une erreur de syntaxe dans le makefile, ou cela peut être dû au fait de s'appuyer sur des fonctionnalités spécifiques à bash lorsque vous avez un /bin/sh ce n'est pas bash. Essayez d'exécuter make Shell=/bin/bash target ou make Shell=/bin/ksh target; si cela ne fonctionne pas, vous devez corriger votre makefile.

Pour clarifier, Make renvoie toujours l'un des trois codes d'erreur, comme indiqué sur gnu.org :

  • 0: l'état de sortie est "réussi"
  • 2: Faire des erreurs rencontrées
  • 1: Retourne la réponse à l'indicateur -q (question), indiquant que les cibles nécessitent une mise à jour

Vous pouvez le tester en exécutant vos exemples ci-dessus (en supposant que vous les ayez encore depuis 2011), puis en exécutant echo $? dans le terminal pour imprimer le code retour précédent.

Make imprimera les autres codes d'erreur qu'il rencontre (comme le 126 que vous avez trouvé), mais s'il rencontre une erreur, il retournera toujours un code d'erreur de 2.

15
Timothy Clifford