Makefile写作过程小结
来源:互联网 发布:在淘宝网上怎么退货 编辑:程序博客网 时间:2024/04/27 18:55
转载地址:http://blog.chinaunix.net/uid-25835268-id-3055356.html
Makefile 的写作思路小结:
1)伪目标2)命令(CC MKDIR...)
3)目录(绝对路径、相对路径、临时目录、条件加入的目录...)
4)实际目标(对空目标分开处理)
5)include(写在all之下)
6)创建目录(对写好的目录加上条件并创建、同时可选择加入依赖中)
7)实际目标的生成方法
8)完善依赖关系
9)头文件的查找与链接
10)库文件依赖关系的裁剪与添加
11)自动生成依赖关系并修改加入前缀(经典六句话)
12)提取公共部分至make.rule文件中并修改模块生成文件的路径
13)各个子模块的目标库文件的写入与删除
14)编写总体Makefile放在指定的build目录中
注:一下程序都来源于《专业嵌入式软件开发》一书,李云著
- .PHONY:all clean
- CC = gcc
- RM = rm
- RMFLAGS = -rf
- MKDIR = mkdir
- AR = ar
- ARFLAGS = crs
- DIR_OBJS = objs
- DIR_DEPS = deps
- DIR_LIBS = ../../../libs
- DIR_EXES = ../../../exes
- DIRS = $(DIR_OBJS) $(DIR_DEPS) $(DIR_LIBS) $(DIR_EXES)
- RMS = $(DIR_DEPS) $(DIR_OBJS)
- LIB = libfoo.a
- ifneq ("$(LIB)","")
- LIB := $(addprefix $(DIR_LIBS)/,$(LIB))
- RMS += $(LIB)
- endif
- EXE = complicated
- ifneq ("$(EXE)","")
- EXE := $(addprefix $(DIR_EXES)/,$(EXE))
- RMS += $(EXE)
- endif
- SRCS = $(wildcard *.c)
- OBJS = $(SRCS:.c=.o)
- OBJS := $(addprefix $(DIR_OBJS)/,$(OBJS))
- DEPS = $(SRCS:.c=.dep)
- DEPS := $(addprefix $(DIR_DEPS)/,$(DEPS))
- #如下写法只是在判断DIR_EXES这个变量是不是空,而不是../../../
- #ifeq("$(DIR_EXES)","")
- ifeq ("$(wildcard $(DIR_EXES))","")
- DEP_DIR_EXES := $(DIR_EXES)
- endif
- ifeq ("$(wildcard $(DIR_OBJS))","")
- DEP_DIR_OBJS := $(DIR_OBJS)
- endif
- ifeq ("$(wildcard $(DIR_DEPS))","")
- DEP_DIR_DEPS := $(DIR_DEPS)
- endif
- ifeq ("$(wildcard $(DIR_LIBS))","")
- DEP_DIR_LIBS := $(DIR_LIBS)
- endif
- all:$(EXE) $(LIB)
- ifneq ($(MAKECMDGOALS),clean)
- include $(DEPS)
- endif
- $(DIRS):
- $(MKDIR) $@
- $(EXE): $(DEP_DIR_EXES) $(OBJS)
- $(CC) -o $@ $(filter %.o,$^)
- $(LIB): $(DEP_DIR_LIBS) $(OBJS)
- $(AR) $(ARFLAGS) $@ $(filter %.o,$^)
- $(DIR_OBJS)/%.o: $(DEP_DIR_OBJS) %.c
- $(CC) -o $@ -c $(filter %.c,$^)
- $(DIR_DEPS)/%.dep: $(DEP_DIR_DEPS) %.c
- @echo "Creating $@ ..."
- @set -e ; \
- $(RM) $(RMFLAGS) $@.tmp ; \
- $(CC) -E -MM $(filter %.c,$^) > $@.tmp ; \
- sed 's,\(.*\)\.o[ :]*,objs/\1.o $@: ,g' < $@.tmp > $@ ; \
- $(RM) $(RMFLAGS) $@.tmp
- clean:
- $(RM) $(RMFLAGS) $(RMS)
另外还有一篇很好的文章:
自己调试通过的一个通用makefile模板
http://blog.csdn.net/longyue0917/article/details/17548779
0 0
- Makefile写作过程小结
- Makefile 小结
- makefile小结
- Makefile小结
- makefile小结
- makefile小结
- Makefile小结,
- Makefile写作的一种模板
- 论文的写作过程
- latex写作过程参考
- MarkDown(+HTML)写作小结
- ACT写作常用句型小结
- 一个minirdr的写作过程
- 资料写作过程 之 名词解释
- 论文写作和投稿过程
- 论文写作过程中的格式
- makefile 文法小结
- Makefile 小结 v1
- 【wikioi1191】 数轴染色
- apue源代码编译和使用
- 类型的评论
- 【wikioi1690】 开关灯
- 编码字符集与字符集编码的区别
- Makefile写作过程小结
- 行式数据库 VS 列式数据库
- hdu 2082 单词数
- 人不能尽信其他人
- POJ 2480 Longge's problem (欧拉函数)
- Android 复制剪切操作
- Hadoop 常用命令
- [微信机器人_06]编码实现(完结)
- [BetterExplained]为什么你应该(从现在开始就)写博客(转载)