【发布时间】:2019-11-08 17:38:42
【问题描述】:
我正在尝试让 makefile 将目标文件编译到 obj 目录中,然后链接编译后的代码并将其转换为可执行文件,就是这样
CC=gcc
CFLAGS=-Iinclude.
OBJ = obj/main.o obj/print.o
%.o: %.c
$(CC) -c -o $@ $< $(CFLAGS)
prog: $(OBJ)
$(CC) -o $@ $^ $(CFLAGS)
并且错误是没有规则来制作目标'obj / main.o','prog'需要。停止。 这是我从 makefile 教程中完成的纯复制粘贴,只是为了确保它不能正常工作。
那为什么这条线不起作用
%.o: %.c
$(CC) -c -o $@ $< $(CFLAGS)
【问题讨论】:
-
很明显,您声明
obj/main.o可以从obj/main.c构建,但您没有后者。 -
@Matt 后者?后者?
-
你没有
obj/main.c,所以配方不适用。 -
@Matt .o: %.c $(CC) -c -o $@ $
-
%.c 仅替换扩展名,但 obj/filename 保留为 make 在 obj 目录中查找它。所以你应该使用 -o obj/$@ 等,而没有 obj/的 OBJ/
标签: makefile