没有规则要在Makefile(GCC编译器)中定位

时间:2013-09-16 17:11:52

标签: gcc compiler-construction makefile

继续在此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

谢谢!

2 个答案:

答案 0 :(得分:1)

我看到有两种可能性。第一个是在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有所不同,因为你向我们展示的那个不应该显示那个错误。

答案 1 :(得分:0)

确保/home/Proj1/Main.cpp存在,否则Makefile看起来很好。  $(PROJ)/Main.cpp指向/home/Proj1/Main.cpp