详细写一个makefile,makefile、main.c、peripherals在同一级目录,include文件夹在makefile的上一级目录,peripherals文件下面有clk和gpio两个文件夹,clk文件夹下有clk.c和clk.h,clk.c引用了clk.h及include文件夹里的a.h、b.h。gpio文件夹下有gpio.c和gpio.h。gpio.c引用了gpio.h及include文件夹里的c.h、gpio.h引用了include文件夹里的d.h、main.c引用了gpio.h和clk.h。
时间: 2024-03-15 13:45:39 浏览: 19
这是一个类似于上一个问题的 Makefile,只是在引用文件时有些不同。以下是一个可能的 Makefile 实现:
```makefile
# 定义变量
CC = gcc
CFLAGS = -Wall -I../include
LDFLAGS =
# 定义源文件和目标文件
SRCDIR = .
OBJDIR = obj
SOURCES = $(wildcard $(SRCDIR)/*.c) $(wildcard $(SRCDIR)/peripherals/clk/*.c) $(wildcard $(SRCDIR)/peripherals/gpio/*.c)
OBJECTS = $(addprefix $(OBJDIR)/,$(notdir $(SOURCES:.c=.o)))
EXECUTABLE = main
# 默认目标
all: $(EXECUTABLE)
# 编译规则
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $^ -o $@
$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
$(CC) $(CFLAGS) -c $< -o $@
$(OBJDIR)/%.o: $(SRCDIR)/peripherals/clk/%.c | $(OBJDIR)
$(CC) $(CFLAGS) -c $< -o $@
$(OBJDIR)/%.o: $(SRCDIR)/peripherals/gpio/%.c | $(OBJDIR)
$(CC) $(CFLAGS) -c $< -o $@
# 创建目录
$(OBJDIR):
mkdir -p $(OBJDIR)
# 清理规则
clean:
rm -rf $(OBJDIR) $(EXECUTABLE)
# 依赖关系
$(OBJDIR)/clk.o: $(SRCDIR)/peripherals/clk/clk.c $(SRCDIR)/peripherals/clk/clk.h ../include/a.h ../include/b.h
$(OBJDIR)/gpio.o: $(SRCDIR)/peripherals/gpio/gpio.c $(SRCDIR)/peripherals/gpio/gpio.h ../include/c.h ../include/d.h
$(OBJDIR)/main.o: $(SRCDIR)/main.c $(SRCDIR)/peripherals/clk/clk.h $(SRCDIR)/peripherals/gpio/gpio.h
.PHONY: all clean
```
和上一个问题相似,我们只需在依赖关系中添加 `../include/d.h` 即可。其他部分与上一个问题的 Makefile 相同。