详细写一个makefile。makefile、main.c、peripherals在同一级目录,include文件夹在makefile的上一级目录,peripherals文件下面有clk、gpio、i2c,clk文件夹下有clk.c和clk.h,clk.c引用了clk.h及include文件夹里的pic32mz_clk.h、xc.h、 p32mz1024efg144reg.h。gpio文件夹下有gpio.c和gpio.h,gpio.c引用了gpio.h,gpio.h引用了include文件夹里的pic32mz_gpio.h。i2c文件夹下有i2c1.c和i2c1.h,i2c1.c引用了i2c1.h及include文件夹里的pic32mz_i2c.h。main.c引用了gpio.h、clk.h、i2c1.h。
时间: 2024-03-21 19:38:41 浏览: 68
以下是一个符合要求的 makefile 文件:
```makefile
# 定义变量
CC = xc32-gcc
CFLAGS = -c -I../include
LFLAGS = -I../include
SRCDIR = ./peripherals
OBJDIR = ./obj
# 定义需要编译的文件
SRCS = main.c \
$(SRCDIR)/clk/clk.c \
$(SRCDIR)/gpio/gpio.c \
$(SRCDIR)/i2c/i2c1.c
# 生成目标文件的名称
OBJS = $(addprefix $(OBJDIR)/,$(SRCS:.c=.o))
# 定义生成可执行文件的规则
app: $(OBJS)
$(CC) $(LFLAGS) $(OBJS) -o app
# 定义编译每个 .c 文件的规则
$(OBJDIR)/%.o: %.c
$(CC) $(CFLAGS) $< -o $@
# 定义清理规则
clean:
rm -f $(OBJDIR)/*.o app
# 定义每个 .c 文件的依赖关系
$(OBJDIR)/clk/clk.o: $(SRCDIR)/clk/clk.c $(SRCDIR)/clk/clk.h ../include/pic32mz_clk.h ../include/xc.h ../include/p32mz1024efg144reg.h
$(CC) $(CFLAGS) $< -o $@
$(OBJDIR)/gpio/gpio.o: $(SRCDIR)/gpio/gpio.c $(SRCDIR)/gpio/gpio.h ../include/pic32mz_gpio.h
$(CC) $(CFLAGS) $< -o $@
$(OBJDIR)/i2c/i2c1.o: $(SRCDIR)/i2c/i2c1.c $(SRCDIR)/i2c/i2c1.h ../include/pic32mz_i2c.h
$(CC) $(CFLAGS) $< -o $@
```
这个 makefile 文件中,我们定义了一些变量,包括编译器的名称、编译选项、源代码目录、目标文件目录等等。我们还定义了需要编译的文件列表和目标文件列表,通过 addprefix 函数将目标文件目录添加到每个目标文件的前面。最后,我们定义了生成可执行文件的规则和编译每个 .c 文件的规则,并且定义了清理规则。与上一个例子不同的是,我们还定义了每个 .c 文件的依赖关系,确保每个文件都能够正确地编译。
阅读全文