Makefile:没有构建目标“*.o”,所需的是“*”。停止。

3
我遇到了以下错误。
make: *** No rule to make target `stretchy_buffer.o', needed by `tsh'.  Stop

试图创建这个makefile

SRCS = stretchy_buffer.c def.c tsh_builtin_commands.c tsh_jobs.c tsh_main.c tsh_routines.c tsh_signals.c
OBJS = $(SRCS:.c=.o)

tsh: $(OBJS)
    gcc -Wall -g -o tsh $(OBJS)
1个回答

9

您需要在您的makefile中添加以下规则:

CFLAGS = -Wall -g

%.o:%.c
    gcc $(CFLAGS) $< -o $@

在您现有的Makefile中,没有指定从*.c文件获取*.o的规则,因此报告了错误。


1
https://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_10.html 详细介绍了当 Makefile 不包含编译规则时,隐式(默认)编译规则的使用。 - cm161
你需要gcc这行吗?如果我们可以假设CC=gcc - jayant
1
@jayant,你是正确的。如果我们声明CC=gcc,则可以使用$(CC)而不是直接使用gcc。由于原始的makefile直接使用了“gcc”,我保留了它以避免混淆。 - cm161
@cm161 谢谢 - 如此简单的事情。当时我并不完全理解应用的模式匹配技术。Makefile 的文档对于少量源文件非常好,但大多数使用模式匹配的示例都过于混乱!CMake,请让这个糟糕的东西消失吧! - Watercycle
如果使用NASM,NASM标志是什么?如果要使用CFLAGS,应该使用什么? - user786

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接