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 make
códigos de erro? Você pode por favor me ajudar? Obrigado.
fonte
Respostas:
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,
./dpp
nã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 omake
utilitário retorna 2 com erro, para que o pai faça relatóriosError 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/sh
que não seja do bash. Tente corrermake SHELL=/bin/bash target
oumake SHELL=/bin/ksh target
; se isso não funcionar, você precisará corrigir seu makefile.fonte
Para esclarecer, o Make sempre retorna um dos três códigos de erro, conforme declarado no gnu.org :
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.
fonte