¿Dónde puedo encontrar una lista de códigos de error 'make'?

26

Estoy tratando de compilar un programa escrito en Fortran usando make(tengo un Makefile y, mientras que en el directorio que contiene el Makefile , escribo el comando $ make target, donde "target" es una especificación de destino específica del sistema presente en mi Makefile . Experimento con varias revisiones de mi especificación de destino, a menudo recibo una variedad de mensajes de error cuando intento llamar make. Para dar algunos ejemplos:

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

y

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

y

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

¿Sabes cómo puedo encontrar una lista de lo que significan los códigos de error, como "Error 126" y "Error 2"? Encontré este hilo en otro sitio web, pero no estoy seguro de lo que significa la respuesta. ¿Significa que no hay un significado independiente del sistema de los makecódigos de error? ¿Podrías ayudarme? Gracias.

Andrés
fuente

Respuestas:

27

Los códigos de error no son de make: make informa el estado de retorno del comando que falló. Debe consultar la documentación de cada comando para saber qué significa cada valor de estado. La mayoría de los comandos no se molestan con distinciones distintas a 0 = éxito, cualquier otra cosa = falla.

En cada uno de sus ejemplos, ./dppno se puede ejecutar. Cuando esto sucede, el shell que intentó invocarlo sale con el código de estado 126 (este es el comportamiento estándar ). La instancia de make que estaba ejecutando ese shell detecta un comando fallido (el shell) y sale, mostrándote Error 126. Esa instancia de make es en sí misma un comando ejecutado por una instancia padre de make, y la makeutilidad devuelve 2 en caso de error, por lo que el padre hace informes Error 2.

Es probable que la falla de su construcción se deba a test: too many arguments. Esto podría ser un error de sintaxis en el archivo MAKE, o podría deberse a depender de características específicas de bash cuando tienes un /bin/shque no es bash. Intenta correr make SHELL=/bin/bash targeto make SHELL=/bin/ksh target; Si eso no funciona, debe arreglar su archivo MAKE.

Gilles 'SO- deja de ser malvado'
fuente
14

Para aclarar, Make siempre devuelve uno de los tres códigos de error, como se indica en gnu.org :

  • 0: el estado de salida es 'Exitoso'
  • 2: cometer errores encontrados
  • 1: Devuelve la respuesta al indicador -q (pregunta), lo que indica que los objetivos requieren actualización

Puede probar esto ejecutando sus ejemplos anteriores (suponiendo que todavía los tenga desde 2011) y luego ejecutando echo $?en el terminal para imprimir el código de retorno anterior.

Make imprimirá otros códigos de error que encuentre (como los 126 que encontró), pero si se encuentra con un error, siempre devolverá un código de error de 2.

Timothy Clifford
fuente