- wildcard : 扩展通配符
- notdir : 去除路径
- patsubst :替换通配符
Makefile 经常使用的代码案例,用来生成编译的target文件
#通配当前目录和子目录下的所有C文件
src=$(wildcard *.c ./subDir/*.c)
#去除路径
dir=$(notdir $(src))
#替换后缀.c=>.o
obj=$(patsubst %.c,%.o,$(dir) )
简易makefile
//makefile
CROSS =
CC = $(CROSS)gcc
CXX = $(CROSS)g++
DEBUG = -g -O2
CFLAGS = $(DEBUG) -Wall -c
RM = rm -rf
SRCS = $(wildcard ./*.c)
OBJS = $(patsubst %.c, %.o, $(SRCS))
TARGET = test
$(TARGET) : $(OBJS)
$(CC) $^ -o $@
$(OBJS):%.o : %.c
$(CC) $(CFLAGS) $< -o $@
clean:
$(RM) $(TARGET) *.o
递归目录生成target文件
#这里递归遍历3级子目录
DIRS := $(shell find . -maxdepth 3 -type d)
FILES = $(foreach dir,$(DIRS),$(wildcard $(dir)/*.c))
#获取目录去除bin目录 (没有调试)
exclude_dirs := bin
dirs := $(shell find . -maxdepth 1 -type d)
dirs := $(basename $(patsubst ./%,%,$(dirs)))
dirs := $(filter-out $(exclude_dirs),$(dirs))