Onde posso encontrar uma lista de códigos de erro 'make'?


26

Estou tentando compilar um programa escrito em Fortran usando make(eu tenho um Makefile e, enquanto no diretório que contém o Makefile , digito o comando $ make target, onde "target" é uma especificação de destino específica do sistema está presente no meu Makefile . Ao experimentar várias revisões da minha especificação de destino, muitas vezes recebo uma variedade de mensagens de erro ao tentar ligar make. Para dar alguns exemplos:

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

e

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

e

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

Você sabe como posso encontrar uma lista do que significam os códigos de erro, como "Erro 126" e "Erro 2"? Encontrei este tópico em outro site, mas não sei o que significa a resposta. Isso significa que não há significado independente do sistema dos makecódigos de erro? Você pode por favor me ajudar? Obrigado.


Respostas:


27

Os códigos de erro não são do make: make está relatando o status de retorno do comando que falhou. Você precisa examinar a documentação de cada comando para saber o que significa cada valor de status. A maioria dos comandos não se incomoda com distinções diferentes de 0 = sucesso, qualquer outra coisa = falha.

Em cada um dos seus exemplos, ./dppnão pode ser executado. Quando isso acontece, o shell que tentou invocá-lo sai com o código de status 126 (esse é o comportamento padrão ). A instância do make que estava em execução que o shell detecta um comando com falha (o shell) e sai, mostrando a você Error 126. Essa instância do make é em si um comando executado por uma instância pai do make, e o makeutilitário retorna 2 com erro, para que o pai faça relatórios Error 2.

É provável que a falha de sua compilação ocorra test: too many arguments. Isso pode ser um erro de sintaxe no makefile ou pode ser devido a depender de recursos específicos do bash quando você tiver um /bin/shque não seja do bash. Tente correr make SHELL=/bin/bash targetou make SHELL=/bin/ksh target; se isso não funcionar, você precisará corrigir seu makefile.


14

Para esclarecer, o Make sempre retorna um dos três códigos de erro, conforme declarado no gnu.org :

  • 0: o status de saída é 'Bem-sucedido'
  • 2: Cometer erros encontrados
  • 1: Retorne a resposta ao sinalizador -q (question), indicando que os destinos exigem atualização

Você pode testar isso executando seus exemplos acima (supondo que você ainda os tenha a partir de 2011) e depois executando echo $?no terminal para imprimir o código de retorno anterior.

O Make imprimirá outros códigos de erro que encontrar (como os 126 que você encontrou), mas se ocorrer um erro, sempre retornará um código de erro 2.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.