一个通用的makefile(一)
最近在编写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= #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:
http://blog.csdn.net/xukai871105/article/details/36475319
http://blog.csdn.net/styyzxjq2009/article/details/26491331
一个通用的makefile(一)的更多相关文章
- 编写一个通用的Makefile文件
1.1在这之前,我们需要了解程序的编译过程 a.预处理:检查语法错误,展开宏,包含头文件等 b.编译:*.c-->*.S c.汇编:*.S-->*.o d.链接:.o +库文件=*.exe ...
- Linux C编程学习之开发工具3---多文件项目管理、Makefile、一个通用的Makefile
GNU Make简介 大型项目的开发过程中,往往会划分出若干个功能模块,这样可以保证软件的易维护性. 作为项目的组成部分,各个模块不可避免的存在各种联系,如果其中某个模块发生改动,那么其他的模块需要相 ...
- 一个通用的Makefile (转)
据http://bbs.chinaunix.net/thread-2300778-1-1.html的讨论,发现还是有很多人在问通用Makefile的问题,这里做一个总结.也作为以后的参考. ...
- 一步一步写一个简单通用的makefile(四)--写一个通用的makefile编译android可执行文件
通常要把我们自己的的代码编译成在android里面编译的可执行文件,我们通常是建一个文件夹 . ├── Android.mk ├── Application.mk ├── convolve.cl ├─ ...
- 一个通用的Makefile(二)
1.各级子目录的Makefile: obj-y += file.o obj-y += subdir/ “obj-y += file.o” 表示把当前目录下的file.c编进程序里. “obj-y += ...
- 一个通用的Makefile框架
先做一个简单的记录,后续有时间再慢慢完善补充细节. 先上一个整体图片: 其中,最重要的文件就是:program_template.mk. 下面是program_template.mk最重要的内容: $ ...
- 14、编写一个通用的Makefile
编译test_Makefile的方法:a. gcc -o test a.c b.c对于a.c: 预处理.编译(C文件转换成汇编).汇编(汇编转换成机器码)对于b.c:预处理.编译.汇编最后链接优点:命 ...
- 一个通用的makefile
# ESDK the makefile setting file - chenwg@20131014 # you can modify "PC = 1" such as " ...
- 我所使用的一个通用的Makefile模板
话不多说,请看: 我的项目有的目录结构有: dirls/ ├── include │ └── apue.h ├── lib │ ├── error.c │ ├── error.o │ ...
随机推荐
- 关于flask登录视图报错AttributeError: '_AppCtxGlobals' object has no attribute 'user'
在一个小程序中写了一个登录视图函数,代码如下: @app.route('/login',methods = ['GET','POST']) @oid.loginhandler def login(): ...
- Swift 3.0在集合类数据结构上的一些新变化
一.Array数组的更改 array数组中修改的API示例如下: //创建大量相同元素的数组//创建有10个String类型元素的数组,并且每个元素都为字符串"Hello"//sw ...
- SoapUI模拟REST MockService
一.新建REST工程 二.添加URI 物流查询接口测试地址:http://www.kuaidi100.com/query?type=快递公司代号&postid=快递单号 三.输入入参,测试一下 ...
- CROSS JOIN,NATURAL JOIN
CROSS JOIN:笛卡尔积 NATURAL JOIN:
- HTTP之URL分解
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接.URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息 URL,全称是U ...
- scala-Future和Promise
首先说明同步与异步,阻塞与非阻塞的问题: Asynchronous vs. Synchronous A method call is considered synchronous if the cal ...
- 三菱Q系列PLC的io分配
1.系统基本配置 2.存储卡配置 3.外部IO标号 4.主基板IO模块的IO号分配 5.扩展基板IO口标号 6.标准配置实例 7. 一.输入采样阶段 在输入采样阶段,可编程逻辑控制器以扫描方式依次地读 ...
- 关于MAX()函数的一点思考
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/103 考虑如下表和sql: CREATE TABLE `ikno ...
- js控制图片自动缩放,实现铺满盒子,不变形,完全局中
此js一般用于控制图片铺满盒子,但是比例不变,并且绝对局中原理:判断图片的高宽与盒子高宽的大小的关系,然后通过比例来控制图片的缩放及定位<!DOCTYPE html PUBLIC "- ...
- js写基础insertAfter()方法
//DOM没有提供insertAfter()方法 function insertAfter(newElement, targetElement){ var parent = targetElement ...