1.递归调用的方式
add:
cd add && $(MAKE)
它等价于
add:
$(MAKE) -C add
2.总控Makefile
CC = gcc
CFLAGS = -O2
TARGET = cacu
export OBJSDIR = $(shell pwd)/objs
(TARGET):(TARGET):(TARGET):(OBJSDIR) main.o
$(MAKE) -C add
$(MAKE) -C sub
$(CC) -o $(TARGET) $(OBJSDIR)/*.o
$(OBJSDIR):
mkdir -p $@
main.o:%.o:%.c
$(CC) -c $< -o (OBJSDIR)/(OBJSDIR)/(OBJSDIR)/@ $(CFLAGS) -Iadd -Isub
clean:
-$(RM) (TARGET)−(TARGET)
-(TARGET)−(RM) $(OBJSDIR)/*.o
如果总控 Makefile 中的一些变量需要传递给下层的 Makefile,可以使用 export 命令。如:export OBJSDIR = ./objs
3.子目录Makefile的编写
Add 目录下的 Makefile 如下:
OBJS = add_int.o add_float.o
all:$(OBJS)
$(OBJS):%.o:%.c
$(CC) -c $< -o (OBJSDIR)/(OBJSDIR)/(OBJSDIR)/@ $(CFLAGS)
clean:
$(RM) $(OBJS)
Sub 目录下的 Makefile 如下:
OBJS = sub_int.o sub_float.o
all:$(OBJS)
$(OBJS):%.o:%.c
$(CC) -c $< -o (OBJSDIR)/(OBJSDIR)/(OBJSDIR)/@ $(CFLAGS)
clean:
$(RM) $(OBJS)