489 Stimmen

gcc makefile Fehler: "No rule to make target ..."

Ich versuche, GCC (Linux) mit einem Makefile zu verwenden, um mein Projekt zu kompilieren.

Ich erhalte die folgende Fehlermeldung, die ich in diesem Zusammenhang nicht entziffern kann:

"No rule to make target 'vertex.cpp', needed by 'vertex.o'.  Stop."

Dies ist das 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

563voto

paxdiablo Punkte 809679

Das liegt normalerweise daran, dass Sie keine Datei namens vertex.cpp zur Verfügung zu stellen. Prüfen Sie das:

  • diese Datei existiert.
  • Sie sind im richtigen Verzeichnis, wenn Sie es machen.

Ansonsten habe ich nicht viel zu empfehlen. Vielleicht könnten Sie uns eine Auflistung dieses Verzeichnisses geben.

102voto

Wes Punkte 4513

Nach meiner Erfahrung wird dieser Fehler häufig durch eine Rechtschreibung Fehler.

Ich habe heute diesen Fehler erhalten.

make[1]: *** No rule to make target maintenaceDialog.cpp', needed by maintenaceDialog.o'. Anhalten.

In meinem Fall handelte es sich lediglich um einen Rechtschreibfehler. Bei dem Wort MAINTENANCE fehlte das dritte N.

Überprüfen Sie auch die Schreibweise Ihrer Dateinamen.

36voto

Der häufigste Grund für die Ausgabe dieser Meldung ist, dass Sie vergessen haben, das Verzeichnis anzugeben, in dem sich die Quelldatei befindet. Infolgedessen "denkt" gcc, dass diese Datei nicht existiert.

Sie können das Verzeichnis mit dem Argument -I zu gcc hinzufügen.

16voto

Nick Knowlson Punkte 6965

In meinem Fall hatte ich dummerweise Kommas als Trennzeichen verwendet. Um Ihr Beispiel zu verwenden, habe ich dies getan:

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

Ändern Sie es in das Äquivalent von

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

repariert.

14voto

Dnyanesh Punkte 2148

In meinem Fall lag es daran, dass ich eine Datei wie MakeFile stattdessen sollte es lauten Makefile .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X