Estou tentando usar o GCC (linux) com um makefile para compilar meu projeto.
Eu recebo o seguinte erro que parece não conseguir decifrar neste contexto:
"No rule to make target 'vertex.cpp', needed by 'vertex.o'. Stop."
Este é o makefile:
a.out: vertex.o edge.o elist.o main.o vlist.o enode.o vnode.o
g++ vertex.o edge.o elist.o main.o vlist.o enode.o vnode.o
main.o: main.cpp main.h
g++ -c main.cpp
vertex.o: vertex.cpp vertex.h
g++ -c vertex.cpp
edge.o: edge.cpp edge.h
g++ -c num.cpp
vlist.o: vlist.cpp vlist.h
g++ -c vlist.cpp
elist.o: elist.cpp elist.h
g++ -c elist.cpp
vnode.o: vnode.cpp vnode.h
g++ -c vnode.cpp
enode.o: enode.cpp enode.h
g++ -c node.cpp
VPATH=
vez deVPATH+=
. Isso faz com que o arquivo Makefile não consiga ver os arquivos quando o arquivo realmente está lá.Respostas:
Isso geralmente ocorre porque você não tem um arquivo chamado
vertex.cpp
disponível para criação. Verifique se:Fora isso, não tenho muito mais o que sugerir. Talvez você possa nos fornecer uma listagem desse diretório.
fonte
Na minha experiência, esse erro é freqüentemente causado por um erro de ortografia .
Eu recebi esse erro hoje.
No meu caso, o erro foi simplesmente um erro de ortografia. Faltava a palavra MANUTENÇÃO, é o terceiro N.
Verifique também a ortografia nos seus nomes de arquivo.
fonte
gcc -MT
e o gnu make patterns pode resolver isso. Veja também .../../src/file.c
mas na verdade era../../src/folder/file.c
O motivo mais comum para essa mensagem ser impressa é porque você esqueceu de incluir o diretório em que o arquivo de origem reside. Como resultado, o gcc "pensa" que esse arquivo não existe.
Você pode adicionar o diretório usando o argumento -I no gcc.
fonte
No meu caso, usei vírgulas de cabeça para separar os ossos. Para usar seu exemplo, eu fiz isso:
Alterando-o para o equivalente a
consertou.
fonte
É exatamente isso? Lembre-se de que a sintaxe Makefile reconhece espaços em branco e requer guias para recuar comandos sob ações.
fonte
O problema que encontrei foi ainda mais tolo do que o que outras pessoas mencionaram.
Nossos makefiles recebem listas de coisas a serem construídas. Alguém foi adicionado
TheOtherLibrary
a uma das listas, como mostrado abaixo.Eles deveriam ter feito isso:
Se eles tivessem feito isso da segunda maneira, não teriam destruído a
Library
construção. A vantagem+=
é muito importante.fonte
No meu caso, foi devido a um erro de regra de várias linhas no Makefile. Eu tinha algo como:
A barra invertida no final da lista de arquivos na
CONFIG_OBJ1
regra causou esse erro. Deve ser como:fonte
Um dos erros frequentes pode ser erro de digitação em outro nome de arquivo .
Seu exemplo é bastante direto, mas o que às vezes pode confundir são mensagens de
make
si mesmo. Vamos considerar um exemplo.O conteúdo da minha pasta é:
Considerando que minha
makefile
aparênciaEmbora eu tenha
index.md
onde deve estar e não haja erro no nome, a mensagem demake
seráPara ser honesto, a mensagem é confusa . Apenas diz que não há regra. De fato, isso significa que a regra está errada, mas devido às regras curinga (padrão)
make
não é possível determinar o que exatamente causou o problema.Vamos alterar
makefile
um pouco, ou seja, substituir padrões por regras explícitas:E agora a mensagem que receberemos será:
Milagre! Pode-se concluir o seguinte:
As mensagens de
make
dependem de regras e nem sempre apontam para a raiz dos problemasPode haver outros problemas
makefile
diferentes dos especificados por esta mensagemAgora, também temos a ideia de verificar outras dependências em uma regra :
Somente isso nos fornecerá o resultado desejado:
fonte
No meu caso, a mensagem de erro se referia a um nome de arquivo antigo, que não existia mais porque foi renomeado. Aconteceu que as informações desatualizadas não vieram do Makefile, mas dos arquivos nos
.deps
diretórios.Corri para esse erro depois de copiar arquivos de uma máquina para outra. Nesse processo, suponho que os carimbos de data e hora entraram em um estado inconsistente, o que confundiu "make" ao executar vários trabalhos em paralelo (semelhante a este relatório de erro ).
Construções seqüenciais com
make -j 1
não foram afetadas, mas demorei um pouco para perceber porque estava usando um alias (make -j 8
).Para limpar o estado, removi todos os
.deps
arquivos e regenerei o Makefile. Estes são os comandos que eu usei:Depois disso, o prédio funcionou novamente.
fonte
Se você está tentando criar o John the Ripper "bleeding-jumbo" e receber um erro como "make: *** Nenhuma regra para definir o destino 'linux-x86-64'". Tente executar este comando:
./configure && make
fonte
No meu caso, o (s) arquivo (s) de origem e / ou objeto antigo foram bloqueados (somente leitura) por um IDE semi-travado ou por um serviço de nuvem de backup que parou de funcionar corretamente. A reinicialização de todos os programas e serviços associados à estrutura de pastas resolveu o problema.
fonte
Outro exemplo de um problema estranho e sua solução:
Este:
dá:
make[3]: *** No rule to make target '/usr/lib/libPocoFoundationd.so', needed by '../hello_poco/bin/mac/HelloPoco'. Stop.
Mas se eu removê-
Poco_LIBRARIES
lo, funciona:Estou usando o clang8 no Mac e o clang 3.9 no Linux O problema ocorre apenas no Linux, mas funciona no Mac!
Esqueci de mencionar:
Poco_LIBRARIES
estava errado - não foi definido pelo cmake / find_package!fonte
No meu caso, o caminho não está definido no VPATH, depois de adicionado o erro.
fonte
Existem vários motivos para esse erro.
Uma das razões pelas quais encontrei esse erro é ao criar para linux e windows.
Eu tenho um nome de arquivo com caps BaseClass.h SubClass.h O Unix mantém uma convenção de nomes de arquivos com distinção entre maiúsculas e minúsculas e o Windows não diferencia maiúsculas de minúsculas.
C ++ por que as pessoas não usam maiúsculas no nome dos arquivos de cabeçalho?
Tente compilar o build limpo usando o gmake clean se você estiver usando o gmake
Alguns editores de texto têm configurações padrão para ignorar nomes de arquivos que diferenciam maiúsculas de minúsculas. Isso também pode levar ao mesmo erro.
como adicionar um arquivo c ++ no Qt Creator cujo nome começa com letras maiúsculas? Faz automaticamente letras minúsculas
fonte
Este erro ocorreu dentro do Travis quando esqueci de adicionar novos arquivos ao meu repositório git. Erro bobo, mas posso ver isso sendo bastante comum.
fonte
No meu caso, foi devido a mim chamar o Makefile: MAKEFILE (all caps)
fonte