簡體   English   中英

Makefile:“沒有規則來制作目標......”有多個工作目錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM