gcc的makefile錯誤:“沒有規則,使目標...”


Answers

以我的經驗,這個錯誤通常是由拼寫錯誤引起的。

今天我得到了這個錯誤。

make [1]:***沒有規則使目標maintenaceDialog.cpp', needed by maintenaceDialog.o'。 停止。

在我的情況下,錯誤只是拼寫錯誤。 維護一詞缺少它的第三個N.

同時檢查文件名的拼寫。

Question

我正在嘗試使用GCC(linux)和makefile來編譯我的項目。

我收到以下在這種情況下似乎無法破譯的錯誤:

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

這是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中設置,添加錯誤消失後。




在我的情況下,我用骨頭的逗號作為分隔符。 要使用你的例子,我做到了這一點:

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

將它改為相當於

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

修復。




當我只將Source目錄複製到不同的位置時,我得到了同樣的錯誤。

我在移動Build目錄後解決了這個問題。




另一個奇怪的問題和解決方案的例子:

這個:

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

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

但是,如果我刪除Poco_LIBRARIES它將起作用:

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

我在Mac上使用clang8,在Linux上使用clang 3.9這個問題只發生在Linux上,但在Mac上有效!

我忘了提及: Poco_LIBRARIES是錯誤的 - 它不是由cmake / find_package設置的!




我發現的問題甚至比其他人提到的還要s s。

我們的makefiles通過了要構建的東西的列表。 有人將TheOtherLibrary添加到其中一個列表中,如下所示。

LIBRARYDIRS = src/Library
LIBRARYDIRS = src/TheOtherLibrary

他們應該做到這一點:

LIBRARYDIRS = src/Library
LIBRARYDIRS += src/TheOtherLibrary

如果他們以第二種方式完成這項工作,他們將不會消滅Library構建。 +中的加號非常重要。




如果你正試圖建立John the Ripper“bleeding-jumbo”並得到一個錯誤,比如“make:*** No rule to make target'linux-x86-64'”。 嘗試運行這個命令: ./configure && make




Related



Tags

gcc   makefile