Makefile编译当前目录下所有c文件到共享库

时间:2021-08-22 12:45:40

在编写c的项目的时候有时候把接口文件都放在一个目录下,并且需要打包成一个共享库,这时候我们充分的利用通配符和函数就可以不用把所有文件都一一写出来了。

OBJS := $(patsubst %.c, %.o, $(wildcard *.c))
OUTLIB := libmyapi.so

CFLAGS := -fPIC -I.
CFLAGS += -I ../myapi

all: $(OBJS) $(OUTLIB)

%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

$(OUTLIB): $(OBJS)
    $(CC) -shared $(CFLAGS) -o $(OUTLIB) $(OBJS)

.PHONY: clean install

clean:
    rm *.o *.so
  • 首先利用wildcard函数匹配到当前目录下所有的c文件
  • patsubst把xxx.c替换为xxx.o,后续把xxx.o作为目标文件使用
  • 利用%通配符匹配到所有为xxx.o的目标,并用xxx.c作为被依赖文件使用
  • $<匹配依赖文件$@匹配目标文件
  • 打包所有的*.o即可