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 make
códigos de error? ¿Podrías ayudarme? Gracias.
fuente
Respuestas:
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,
./dpp
no 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ándoteError 126
. Esa instancia de make es en sí misma un comando ejecutado por una instancia padre de make, y lamake
utilidad devuelve 2 en caso de error, por lo que el padre hace informesError 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/sh
que no es bash. Intenta corrermake SHELL=/bin/bash target
omake SHELL=/bin/ksh target
; Si eso no funciona, debe arreglar su archivo MAKE.fuente
Para aclarar, Make siempre devuelve uno de los tres códigos de error, como se indica en gnu.org :
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.
fuente