【问题标题】:problem with makefile , No rule to make target [C] [closed]makefile 的问题,没有规则来制作目标 [C] [关闭]
【发布时间】:2021-07-05 20:22:58
【问题描述】:

大家好,我正在尝试运行这个 makefile,但终端给了我输出:

 make: *** No rule to make target 'abc'. Stop.

这是生成文件

CFLAGS = -Wall
CC = gcc
LP = -lpthread

all: abc

abc: exam.o memorizer.o
      $(CC) $(LP) exam.o memorizer.o

exam.o: exam.c
      $(CC) -g $(CFLAGS) $(LP) exam.c -o exam.o

memorizer. or: memorizer.c
      $(CC) -g $(CFLAGS) memorizer.c -o memorizer.o

clean:
      rm *.o abc

我能做什么?

【问题讨论】:

  • 那是您的确切生成文件吗?每个目标的命令都需要标签。 $ 和被扩展的变量之间不能有空格。
  • @kaylum 这应该是答案。另外rm * .o abc 是邪恶的,*.o 之间的空间改变了一切。此命令删除目录中的所有文件。
  • 我同意@kaylum 的 cmets 但这不是这里的问题。如果生成文件与此处键入的内容完全相同,则将出现语法错误,而不是“没有生成目标的规则”。请显示您输入的确切 make 命令和您得到的确切错误,并告诉我们您的 makefile 的文件名。我怀疑您将 makefile 命名为非标准的东西,然后在命令行上键入 make abc
  • @mch 我们没有足够的信息说这就是答案。 makfile 肯定有一些问题,但可能无法解释确切的症状。我希望 OP 将得到更新和澄清。
  • 抱歉复制粘贴失败,现在我重新调整了makefile。 makefile 的名称是“Makefile”,终端将我上面写的内容返回给我。

标签: c makefile


【解决方案1】:

运行 make 时是否存在exam.o 和 memorizer.o 文件? 缺少依赖文件会导致“make: *** No rule to make target”,尽管我认为完整的输出会显示类似“''需要”

【讨论】:

  • 这不是答案,应该作为评论添加。
【解决方案2】:

您似乎在$(CC) 命令的末尾错过了.o(并且在memorizer 目标中打错了字):

exam.o: exam.c
      $(CC) -g $(CFLAGS) (LP) exam.c -o exam.o

memorizer.o: memorizer.c
      $(CC) -g $(CFLAGS) memorizer.c -o memorizer.o

【讨论】:

  • 我试图修复 makefile 但它仍然不起作用。我不明白的事情是因为如果我执行命令:“make abc”它会返回我上面写的内容,而如果我写“make -f Makefile.mak”它似乎编译实际上它也给了我一些然后警告但它告诉我:/usr/bin/ld:/tmp/ccBHd9Tg.o: 在函数main ': /home/pollo/exam.c:111: undefined reference to pthread_create'/usr/bin/ld:/home/pollo/exam.c:122: 未定义的引用` pthread_join ' collect2: error: ld returned 1 exit status make: *** [Makefile.mak: 12:exam.o] Error 1
  • @MaonnaPenzola 此错误与make 无关,它是由您的 c 编译器的链接器产生的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多