以下是一个简单的 Makefile 示例,可以提取出 app.c、h.c 和 ac.c:
```
# 定义变量
SRCDIR = ../src
APPDIR = ../app
# 指定编译器和编译选项
CC = gcc
CFLAGS = -Wall -Wextra
# 指定目标文件和依赖关系
TARGET = myprogram
OBJS = app.o h.o ac.o
DEPS = $(SRCDIR)/app.h $(APPDIR)/h.h $(APPDIR)/ac.h
# 编译规则
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) $^ -o $@
%.o: $(SRCDIR)/%.c $(DEPS)
$(CC) $(CFLAGS) -c $< -o $@
%.o: $(APPDIR)/%.c $(DEPS)
$(CC) $(CFLAGS) -c $< -o $@
# 清理规则
clean:
rm -f $(TARGET) $(OBJS)
```
在这个 Makefile 中,我们定义了三个变量:`SRCDIR` 表示源代码目录,`APPDIR` 表示应用程序目录,`CC` 表示编译器,`CFLAGS` 表示编译选项。然后,我们指定了目标文件 `myprogram` 和依赖关系 `app.o`、`h.o` 和 `ac.o`,以及它们所依赖的头文件 `app.h`、`h.h` 和 `ac.h`。
接下来,我们定义了两个编译规则,分别用于编译源代码目录和应用程序目录中的 C 文件。这里使用了通配符 `%`,表示任意文件名。例如,`%.o` 表示所有以 `.o` 结尾的文件。
最后,我们定义了一个清理规则 `clean`,用于删除目标文件和中间文件。
在命令行中执行 `make` 命令即可编译程序。如果要清理目标文件和中间文件,可以