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

4voto

Ogglas Punkte 48648

Wenn Sie versuchen, John the Ripper "bleeding-jumbo" zu bauen und eine Fehlermeldung wie "make: *** No rule to make target 'linux-x86-64'". Versuchen Sie stattdessen diesen Befehl auszuführen: ./configure && make

4voto

Philipp Claßen Punkte 36619

In meinem Fall bezog sich die Fehlermeldung auf einen alten Dateinamen, der nicht mehr existiert, weil er umbenannt wurde. Es stellte sich heraus, dass die veralteten Informationen nicht aus dem Makefile stammten, sondern aus Dateien in .deps Verzeichnisse.

Ich bin auf diesen Fehler gestoßen, nachdem ich Dateien von einem Rechner auf einen anderen kopiert habe. Ich nehme an, dass dabei die Zeitstempel in einen inkonsistenten Zustand geraten sind, was "make" verwirrt hat, wenn mehrere Aufträge parallel laufen (ähnlich wie bei dieser Fehlerbericht ).

Sequentielle Bauten mit make -j 1 waren nicht betroffen, aber es dauerte eine Weile, bis ich es merkte, weil ich einen Alias verwendete ( make -j 8 ).

Um den Zustand zu bereinigen, habe ich alle .deps Dateien und generierte das Makefile neu. Dies sind die Befehle, die ich verwendet habe:

find | grep '.deps' | xargs rm
find | grep '.deps' | xargs rmdir
autoreconf --install # (optional, but my project is using autotools) 
./configure

Danach funktionierte der Bau wieder.

3voto

João Paulo Punkte 5730

Mein Fall war ein Vermisstenfall $ :

Anstelle von:

(LINK_TARGET): $(OBJS)

Sollte sein:

$(LINK_TARGET): $(OBJS)

3voto

tzuhsun Punkte 71

In meinem Fall ist der Pfad nicht in VPATH gesetzt, nach dem Hinzufügen ist der Fehler weg.

2voto

Mike Mitterer Punkte 5932

Ein weiteres Beispiel für ein seltsames Problem und seine Lösung:

Dies:

target_link_libraries(
    ${PROJECT_NAME}
    ${Poco_LIBRARIES}
    ${Poco_Foundation_LIBRARY}
    ${Poco_Net_LIBRARY}
    ${Poco_Util_LIBRARY}
    )

gibt: make[3]: *** No rule to make target '/usr/lib/libPocoFoundationd.so', needed by '../hello_poco/bin/mac/HelloPoco'. Stop.

Aber wenn ich die Poco_LIBRARIES es funktioniert:

target_link_libraries(
    ${PROJECT_NAME}
    ${Poco_Foundation_LIBRARY}
    ${Poco_Net_LIBRARY}
    ${Poco_Util_LIBRARY}
    )

Ich verwende clang8 auf Mac und clang 3.9 auf Linux Das Problem tritt nur unter Linux auf, funktioniert aber auf dem Mac!

Ich vergaß zu erwähnen: Poco_LIBRARIES war falsch - sie wurde nicht von cmake/find_package gesetzt!

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