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

21

Eu estou tentando compilar um programa escrito em Fortran usando make (eu tenho um Makefile e, enquanto no diretório que contém o Makefile , eu digito o comando $ make target , onde "target" é uma especificação de destino específica do sistema está presente no meu Makefile . Como experimento com várias revisões da minha especificação de destino, muitas vezes recebo uma variedade de mensagens de erro ao tentar chame 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 dos códigos de erro, como "Erro 126" e "Erro 2"? Eu encontrei este tópico em outro site, mas não tenho certeza do que a resposta significa. Isso significa que não há significado independente do sistema dos códigos de erro make ? Você pode por favor me ajudar? Obrigado.

    
por Andrew 15.08.2011 / 23:46

2 respostas

23

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

Em cada um dos seus exemplos, ./dpp não pode ser executado. Quando isso acontece, o shell que tentou invocá-lo sai com o código de status 126 (isso é comportamento padrão ). A instância do make que estava executando esse shell detecta um comando com falha (o shell) e sai, mostrando Error 126 . Essa instância de make é, por si só, um comando executado por uma instância pai de make, e o utilitário make retorna 2 em caso de erro, portanto, o pai faz relatórios Error 2 .

A falha da sua compilação provavelmente será proveniente de test: too many arguments . Isso pode ser um erro de sintaxe no makefile ou pode ser devido a recursos específicos do bash quando você tem um /bin/sh que não é bash. Tente executar make SHELL=/bin/bash target ou make SHELL=/bin/ksh target ; se isso não funcionar, você precisa consertar seu makefile.

    
por 16.08.2011 / 00:03
10

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

  • 0: o status de saída é "bem-sucedido"
  • 2: cometer erros encontrados
  • 1: Retorna a resposta para o sinalizador -q (question), indicando que os destinos precisam ser atualizados

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

Make imprime outros códigos de erro encontrados (como o 126 que você encontrou), mas se ocorrer um erro, ele sempre retornará um código de erro igual a 2.

    
por 29.09.2015 / 23:01