一、多目标
.PHONY:clean all
CC= gcc
CFLAGS= -Wall -g
LOCAL_PATH=$(shell pwd)
BIN=test01 test02
all:$(BIN)
#%.o:%.c
.c.o:
$(CC) $(CFLAGS) -c $< -o $@
test01:test01.o sub.o
$(CC) $(CFLAGS) -o $@ $^
test02:test02.o add.o
$(CC) $(CFLAGS) -o $@ $^
clean:
echo "$(LOCAL_PATH)"
rm -f $(BIN) *.o
二、多级目录
经常用到的三个函数 $(wildcard pattern) $(patsubst pattern, replacement, text) $(shell cmd)
.PHONY:clean
CC=gcc
CFLAGS= -Wall -g
BIN=main_exe
ROOTSRC=$(wildcard *.c)
ROOTOBJ=$(patsubst %.c, %.o, $(ROOTSRC))
SUBDIR=$(shell ls -d */)
SUBSRC=$(shell find $(SUBDIR) -name '*.c')
SUBOBJ=$(SUBSRC:%.c=%.o)
$(BIN):$(ROOTOBJ) $(SUBOBJ)
$(CC) $(CFLAGS) $^ -o $@
%.o:%.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -rf $(BIN) $(ROOTOBJ) $(SUBOBJ)
三、多级目录多目标
SUBDIRS=01test 02test
.PHONY:all clean $(SUBDIRS)
all clean:
$(MAKE) $(SUBDIRS) TARGET=$@
$(SUBDIRS):
$(MAKE) -C $@ $(TARGET)
$(MAKE)就是make命令,TARGET被赋值成目标然后传递到子目录下的Makefile,子目录下的Makefile按照一二方法写即可。