[英]Makefile: “No rule to make target…” with multiple working directories
我正在嘗試運行此makefile,並遇到問題。 告訴我
"No rule to make target 'UDP_Server.o', needed by 'SendRawData',
既然我已經給它了文件的工作目錄,那么%.o文件的規則不應該正常工作嗎? 我在/ thing / asset / src目錄中啟動make,並且我不關心它放置o文件或程序的位置,只要我可以訪問它們。 這是我的makefile:
CC = g++
INC += -I/home/pi/thing/
INC += -I/home/pi/thing/Asset/src/
INC += -I/home/pi/thing/Server/src/
INC += -I/home/pi/thing/Shared/NetworkInterface/src/
INC += -I/home/pi/mercuryapi/c/src/
LIB = /home/pi/mercury/c/src/api/
CFLAGS = -std=c++11 -Wno-write-strings
LDFLAGS = -L$(LIB) -static -l libmercuryapi
SOURCES += UDP_Client.cpp
SOURCES += UDP_Server.cpp
SOURCES += rawData.cpp
SOURCES += packetMethods.cpp
SOURCES += parseData.cpp
SOURCES += SendRawData.cpp
OBJECTS = $(SOURCES:.cpp=.o)
DEPS = UDP_Client.h
DEPS += UDP_Server.h
DEPS += packet.h
DEPS += rawData.h
DEPS += packetMethods.h
DEPS += parseData.h
DEPS += tm_reader.h
default: SendRawData
%.o: %.cpp $(SOURCES) $(DEPS)
$(CC) $(CFLAGS) $(INC) -c $< -o $@
SendRawData: $(OBJECTS)
$(CC) $(CFLAGS) $(LDFLAGS) $(INC) $< -o SendRawData
client: cmain.cpp UDP_Client.cpp
$(CC) $(CFLAGS) cmain.cpp UDP_Client.cpp -o client
.cpp.o:
$(CC) $(CFLAGS) $(INC) -c $< -o $@
.PHONY: clean
clean:
rm *.o
如果它有幫助,這里是可視化的目錄結構:
/home/pi/thing/
├── Asset
│ ├── README.txt
│ └── src
│ ├── makefile
│ ├── README.txt
│ ├── SendRawData.cpp
│ ├── UDP_Client.cpp
│ └── UDP_Client.h
├── Server
│ └── src
│ ├── README.txt
│ ├── server
│ ├── UDP_Server.cpp
│ ├── UDP_Server.h
│ └── UDP_Server.o
└── Shared
├── NetworkInterface
│ ├── README.txt
│ └── src
│ ├── header.h
│ ├── packet.h
│ ├── packetMethods.cpp
│ ├── packetMethods.h
│ ├── parseData.cpp
│ ├── parseData.h
│ ├── rawData.cpp
│ ├── rawData.h
│ └── testing.cpp
└── README.txt
小心放置文件的位置。 您需要告訴make源文件的位置。
丑陋,乏味但解釋性的解決方案是在指定依賴項時添加路徑。 代替
SOURCES += UDP_Client.cpp
寫
SOURCES += ../../Server/src/UDP_Client.cpp
美麗而簡單的解決方案是使用make VPATH變量:
https://www.gnu.org/software/make/manual/html_node/General-Search.html
例如
VPATH = "../../Server/src/UDP_Client.cpp:<list of : separated paths>"
此解決方案可能僅在您使用gnu make時才有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.