linux - 'all' 需要 Makefile 错误 : No rule to make target, 。停止

标签 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 order 执行;该程序给了我这个错误:

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

有人有想法吗?

最佳答案

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

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

您必须分别对 test 子目录执行相同的操作。

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

关于linux - 'all' 需要 Makefile 错误 : No rule to make target, 。停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46364720/

相关文章:

php - 用于 Linux 的 xdebug dbgp 客户端

linux - 在 linux 中,有没有一种方法可以让文件在被其他人打开时只读,这样只有他们才能访问它

c - 使用 while 循环的简单程序出现段错误,但扩展时没有错误。如何?

Makefile 无法与 cygwin 一起使用

linux - 如何使用 Ansible 设置 Linux 环境变量

linux - Bash 脚本为不同的用户返回不同的结果

c++ - Mac 上的 OpenMP 不再工作

c++ - 检索数据结构对齐信息

makefile - CENTOS - Linux - Make - Makefile(获取用户输入不起作用)

Linux Makefile 项目调试最佳实践和工具