在此 make 文件上不断出现错误,提示“没有规则来制作目标 '/Main.cpp','Main.o' 需要
HOME = /home/
CC = g++ -Wall -pedantic
PROJ = $(HOME)/Proj1
INCL = -I $(PROJ)
all: main.x
main.x: List.o Summary.o Main.o
< TAB >:$(CC) -o main.x List.o Summary.o Main.o
List.o: $(PROJ)/List.h $(PROJ)/List.cpp
< TAB >$(CC) -c $(INCL) $(PROJ)/List.cpp
Summary.o: $(PROJ)/Summary.h $(PROJ)/Summary.cpp
< TAB >$(CC) -c $(INCL) $(PROJ)/Summary.cpp
Main.o: $(PROJ)/Main.cpp
< TAB >$(CC) -c $(INCL) $(PROJ)/Main.cpp
clean:
< TAB >rm -rf *.o *~ *.x
我认为有两种可能性。 第一个是 PROJ 变量定义末尾有一些无关的空格。 在 make 中,行尾的所有额外空格都会被保留。 所以如果你写这个:
PROJ = $(HOME)/Proj1 # some whitespace at the end
变量的值将是
'$(HOME)/Proj1 '
(包括空格——但没有引号)。 然后当您在先决条件列表中使用它时:
Main.o: $(PROJ)/Main.cpp
它扩展为:
Main.o: $(HOME)/Proj1 /Main.cpp
这是两个不同的先决条件:目录和不存在的文件
/Main.cpp
。
如果不是这样,那么您向我们展示的 makefile 在某些方面与您正在使用的 makefile 有所不同,因为您向我们展示的 makefile 不应显示该错误。
确保 /home/Proj1/Main.cpp 存在,否则 Makefile 看起来不错。 $(PROJ)/Main.cpp 指向 /home/Proj1/Main.cpp