我在这个目录中写了一个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.
有人有想法吗?
答案 0 :(得分:2)
您需要告诉make以某种方式将源文件名映射到目标文件。这可能有效:
bin/obj/%.o: src/%.c
gcc -c $< -o $@ $(CFLAGS)
您必须为test
子目录单独执行相同的操作。
对于缺少的头文件头,您必须将-Iinclude
添加到命令行(最好是在另一个变量而不是CFLAGS
中,这样它仍然可以覆盖来自命令行的CFLAGS
。
答案 1 :(得分:-1)
您没有任何bin/obj
或{{1}}文件夹......