一个通用的makefile(一)
2017-07-21 16:44
411 查看
最近在编写Android编译系统时,需要遍历每一个目录下每一个文件夹下的makefile,网上的方法有些繁琐 ;就直接贴上自己遍历子目录深度为1;(for temporary)(之后会继续更新)
下面是我的一个简单实例工程:
文件夹目录层次:
1、根目录(相对于项目而言)的makefile
#获取当前目录下的子目录名字 subdir = $(shell ls -l | grep ^d | awk '{print $$9}') .PHONY : all clean ${subdir} NULL all: ${subdir} ${subdir} : NULL make -C $@ clean make -C $@ #make clean可以直接去掉各层目录下的*.o文件,而在Android编译系统中会直接删除out路径就可以了 clean: find ./ -name '*.o' | xargs -I{} rm -f {} NULL: #:为空语句 @:
2、子目录下的makefile:
#PWD = "shell pwd" CC := gcc #shell pwd是比较好一点的 INC_DIR := $(shell pwd)/inc/ SRC_DIR := $(shell pwd)/src/ OBJ_DIR := $(shell pwd)/obj/ BIN_DIR := $(shell pwd)/bin/ LIB_DIR := $(shell pwd)/lib/ #目标文件名 TARGET := $(BIN_DIR)/main CFLAGS := -g CFLAGS += -Wall CFLAGS += -D_FORTIFY_SOURCE=2 #patsubst 是替换通配符,会把第一个%.c替换成第二个参数的%.c, #wildcard 是把指定目录 $(SRC_DIR)下面的.c文件全部展开 #notdir 是把展开的文件去掉路径信息 SOURCES := $(patsubst %.c,%.c,$(notdir $(wildcard $(SRC_DIR)/*.c))) \ OBJECTS := $(addprefix $(OBJ_DIR)/, $(SOURCES:.c=.o)) .PHONY : clean all $(TARGET) $(OBJECTS) INCPATHS := \ -I. \ LIBDIRS := \ -L. \ LIBS := \ -lpthread \ $(TARGET) : $(OBJECTS) @mkdir -p $(LIB_DIR) $(BIN_DIR) 2> /dev/null $(CC) $(CFLAGS) -o $@ $(OBJECTS) $(OBJECTS) : $(OBJ_DIR)/%.o : $(SRC_DIR)/%.c @mkdir -p $(OBJ_DIR) 2> /dev/null $(CC) -c $(CFLAGS) $< -o $@ all: $(OBJECTS) $(TARGET) clean: find ./ -name '*.*.swp' | xargs -I{} rm -f {} rm -f $(OBJECTS) $(TARGET)
Reference:
相关文章推荐
- 向大家推荐一个C/C++通用Makefile
- 一个通用的Makefile文件
- 一个简单的通用Makefile实现
- 一个通用Makefile详解--收藏一个网址
- 一步一步写一个简单通用的makefile(三)
- 一个通用的makefile写法,自动推导文件的依赖关系【转】
- 自己写一个简单通用的Makefile
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 编写一个简单通用的makefile
- 一个简单通用的makefile
- 一个通用Makefile的编写
- 向大家推荐一个C/C++通用Makefile
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个比较通用的makefile
- 一个通用Makefile详解
- 主题:向大家推荐一个C/C++通用Makefile
- 一个用于对 C/C++ 的通用 Makefile