一份通用makefile,自动遍历子目录源文件,自动生成依赖

这份makefile可以将当前makefile所在文件夹以及所有子文件夹中的cpp文件打包成静态库/动态库/可执行文件.
自动生成所有依赖关系,修改任何文件都可以触发重新编译相应依赖的文件。

在Ubuntu 和 OSX 系统测试通过。

这份makefile可以将当前makefile所在文件夹以及所有子文件夹中的cpp文件打包成静态库/动态库/可执行文件.
自动生成所有依赖关系,修改任何文件都可以触发重新编译相应依赖的文件。

在Ubuntu 和 OSX 系统测试通过。


  1. SHELL = /bin/bash  
  2.   
  3. AllDirs := $(shell ls -R | grep '^\./.*:$$' | awk '{gsub(":","");print}') .  
  4. Sources := $(foreach n,$(AllDirs) , $(wildcard $(n)/*.cpp))  
  5. Objs := $(patsubst %.cpp,%.o, $(Sources))  
  6. Deps := $(patsubst %.cpp,%.d, $(Sources))  
  7. StaticLib := libyy.a  
  8. DynamicLib := libyy.so  
  9. Bin := yy  
  10.   
  11. #AllLibs : $(DynamicLib)  
  12. #AllLibs : $(StaticLib)   
  13. AllLibs : $(Bin)  
  14.   
  15. CC = g++  
  16. CXXFLAGS = -g -O2 -fPIC -Wall  
  17. CPPFLAGS = $(foreach n,$(AllDirs) , -I$(n))  
  18. LDFLAGS = -lstdc++  
  19.   
  20. $(StaticLib) : $(Objs)  
  21.     ar rcs $@ $^  
  22.   
  23. $(DynamicLib) : $(Objs)  
  24.     g++ -shared -o $@ $^ $(LDFLAGS)  
  25.   
  26. $(Bin) : $(Objs)  
  27.     g++ $(Objs) -o $@  
  28.   
  29. %.d : %.cpp  
  30.     $(CC) -MT"$(<:.cpp=.o) $@" -MM $(CXXFLAGS) $(CPPFLAGS) $< > $@  
  31.   
  32. sinclude $(Deps)  
  33.   
  34. .PHONY : clean  
  35. clean:   
  36.     rm -f $(Objs) $(Deps) $(StaticLib) $(DynamicLib) 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值