Makefile错误:没有规则来制作目标,所有'都需要。停止

时间:2017-09-22 12:22:01

标签: linux gcc makefile

我在这个目录中写了一个Makefile:

    .
├── bin
│   └── obj
├── include
│   ├── globals.h
│   ├── ma.h
│   ├── mb.h
│   ├── mc.h
│   └── md.h
├── Makefile
├── Makefile.save
├── src
│   ├── ma.c
│   ├── main.c
│   ├── mb.c
│   ├── mc.c
│   └── md.c
└── test
    ├── main.c
    └── main.o

我的Makefile如下:

CFLAGS := -Wall -g -pedantic --std=c99

objs := bin/obj/ma.o bin/obj/mb.o bin/obj/mc.o bin/obj/md.o bin/obj/main.o

all: $(objs)

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

但是我不能用make命令执行;该程序给了我这个错误:

make: *** No rule to make target 'bin/obj/ma.o', needed by 'all'.  Stop.

有人有想法吗?

2 个答案:

答案 0 :(得分:2)

您需要告诉make以某种方式将源文件名映射到目标文件。这可能有效:

bin/obj/%.o: src/%.c
    gcc -c $< -o $@ $(CFLAGS)

您必须为test子目录单独执行相同的操作。

对于缺少的头文件头,您必须将-Iinclude添加到命令行(最好是在另一个变量而不是CFLAGS中,这样它仍然可以覆盖来自命令行的CFLAGS

答案 1 :(得分:-1)

您没有任何bin/obj或{{1}}文件夹......