一个通用的makefile(一)
一个 通用 Makefile
2023-09-27 14:29:06 时间
最近在编写Android编译系统时,需要遍历每一个目录下每一个文件夹下的makefile,网上的方法有些繁琐 ;就直接贴上自己遍历子目录深度为1;(for temporary)(之后会继续更新)
下面是我的一个简单实例工程:
文件夹目录层次:
1、根目录(相对于项目而言)的makefile
1 #获取当前目录下的子目录名字 2 subdir = $(shell ls -l | grep ^d | awk '{print $$9}') 3 4 .PHONY : all clean ${subdir} NULL 5 6 all: ${subdir} 7 ${subdir} : NULL 8 make -C $@ clean 9 make -C $@ 10 11 #make clean可以直接去掉各层目录下的*.o文件,而在Android编译系统中会直接删除out路径就可以了 12 clean: 13 find ./ -name '*.o' | xargs -I{} rm -f {} 14 NULL: 15 #:为空语句 16 @:
2、子目录下的makefile:
1 #PWD = "shell pwd" 2 CC := gcc 3 #shell pwd是比较好一点的 4 INC_DIR := $(shell pwd)/inc/ 5 SRC_DIR := $(shell pwd)/src/ 6 OBJ_DIR := $(shell pwd)/obj/ 7 BIN_DIR := $(shell pwd)/bin/ 8 LIB_DIR := $(shell pwd)/lib/ 9 10 #目标文件名 11 TARGET := $(BIN_DIR)/main 12 13 14 CFLAGS := -g 15 CFLAGS += -Wall 16 CFLAGS += -D_FORTIFY_SOURCE=2 17 18 19 #patsubst 是替换通配符,会把第一个%.c替换成第二个参数的%.c, 20 #wildcard 是把指定目录 $(SRC_DIR)下面的.c文件全部展开 21 #notdir 是把展开的文件去掉路径信息 22 SOURCES := $(patsubst %.c,%.c,$(notdir $(wildcard $(SRC_DIR)/*.c))) \ 23 24 OBJECTS := $(addprefix $(OBJ_DIR)/, $(SOURCES:.c=.o)) 25 26 27 .PHONY : clean all $(TARGET) $(OBJECTS) 28 29 INCPATHS := \ 30 -I. \ 31 32 LIBDIRS := \ 33 -L. \ 34 35 LIBS := \ 36 -lpthread \ 37 38 $(TARGET) : $(OBJECTS) 39 @mkdir -p $(LIB_DIR) $(BIN_DIR) 2> /dev/null 40 $(CC) $(CFLAGS) -o $@ $(OBJECTS) 41 $(OBJECTS) : $(OBJ_DIR)/%.o : $(SRC_DIR)/%.c 42 @mkdir -p $(OBJ_DIR) 2> /dev/null 43 $(CC) -c $(CFLAGS) $< -o $@ 44 45 all: $(OBJECTS) $(TARGET) 46 47 clean: 48 find ./ -name '*.*.swp' | xargs -I{} rm -f {} 49 rm -f $(OBJECTS) $(TARGET)
Reference:
相关文章
- yarn client中的一个BUG的修复
- 进程与线程的一个简单解释
- Qt之运行一个实例进程
- 如何实现一个稍微复杂的simplelist
- 公司新来一个同事,把网关系统设计的炉火纯青!(万能通用,稳的一批。。)
- 用JSP+JavaBean开发模式实现一个销售额的查询
- 将多个网页制作成一个CHM文件
- PHP解决多个进程同时写入一个文件
- 阿里公布财报 云业务已成下一个增长极
- 2021年9月28日,老是遇到一些非常奇葩的问题。就离谱、好好的一个web项目就莫名奇妙坏了。
- Python正则表达式re.findall一个有趣的现象
- 采用truelicense进行Java规划license控制 扩展可以验证后,license 开始结束日期,验证绑定一个给定的mac住址
- 安卓给相对布局RelativeLayout增加一个通用遮罩层
- python logging一个通用的使用模板
- 封装一个通用的 okhttp 库
- 自由职业的方向:一个人活成一家公司
- Vue全家桶实现一个购物Web App
- Vue.js写一个音乐播放器.A music player by Vue.js
- 用python编写一个无重复子串