【问题标题】:No rule to target in Makefile (GCC Compiler)Makefile 中没有目标规则(GCC 编译器)
【发布时间】:2013-09-20 22:27:18
【问题描述】:

在这个 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

谢谢!

【问题讨论】:

  • 您确定这正是您正在使用的 makefile,以及您看到的 exact 错误吗?在我看来,您在某处拼写错误或重置了 PROJ 变量,因此先决条件 $(PROJ)/Main.cpp 正在扩展到只是 /Main.cpp
  • 这个 Makefile 看起来不错。您已经通过添加 &lt; TAB &gt; 对其进行了编辑,您还编辑了其他内容吗,或者这与您实际使用的 Makefile 完全相同?
  • 这是我使用的确切生成文件。刚刚从项目扩展中取出我的姓
  • main.x 目标的第一个命令行真的以冒号开头(即:$(CC) -o main.x ...)吗?不知道这应该是什么意思......虽然这可能与你的问题无关......
  • @Rob 您的姓氏、名字和姓氏之间或PROJ = $(HOME)/Proj1 部分后面的其他任何地方是否有空格?

标签: gcc compiler-construction makefile


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我看到了两种可能性。第一个是您在 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 不应该显示该错误。

    【讨论】:

      猜你喜欢
      • 2012-05-15
      • 2010-10-24
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多