makefile专题:变量与函数的综合示例
2018-02-08 22:17
441 查看
1. 实战需求
1)自动生成target文件夹存放可执行文件2)自动生成objs文件夹存放编译生成的目标文件(* .o)
3)支持调试版本的编译选项
4)考虑代码的扩展性
2. 工具原料
$(wildcard_parrern):获取当前工作目录中满足
_pattern的文件或目录列表
$(addprefix _prefix, _names):给名字列表
_names中的每一个名字增加前缀
_prefix
3. 关键技巧
自动获取当前目录下的源文件列表(函数调用):SRCS := $(wildcard *.c)
根据源文件列表生成目标文件列表(变量的值替换):
OBJS := $(SRCS:.c=.o)
对每一个目标文件列表加上路径前缀(函数调用):
OBJS := $(addprefix path/, $(OBJS))
4. 规则中的模式替换(目录结构)
### 5. 编译规则的依赖
CC := gcc MKDIR := mkdir RM := rm -fr DIR_OBJS := objs DIR_TARGET := target DIRS := $(DIR_OBJS) $(DIR_TARGET) TARGET := $(DIR_TARGET)/hello-makefile.out SRCS := $(wildcard *.c) OBJS := $(SRCS:.c=.o) OBJS := $(addprefix $(DIR_OBJS)/, $(OBJS)) .PHONY : rebuild clean all $(TARGET) : $(DIRS) $(OBJS) $(CC) -o $@ $(OBJS) @echo "Target File ==> $@" $(DIRS) : $(MKDIR) $@ $(DIR_OBJS)/%.o : %.c ifeq ($(DEBUG),true) $(CC) -o $@ -g -c $^ else $(CC) -o $@ -c $^ endif rebuild : clean all all : $(TARGET) clean : $(RM) $(DIRS)
6. 小结
目录可以成为目标的依赖,在规则中创建目录预定义函数是makefile实战时不可或缺的部分
规则中的模式匹配可以直接针对目录中的文件
可以使用命令行变量编译特殊的目标版本(如DEBUG版)
声明:此文章为本人在学习狄泰软件学院《十二月提升计划》所做的笔记,参考书籍《专业嵌入式软件开发》——李云,文章中包含狄泰软件资料内容和《专业嵌入式软件开发》资料内容,一切版权归狄泰软件和《专业嵌入式软件开发》所有!
相关文章推荐
- 变量与函数的综合示例
- 变量与函数的综合示例
- 10-变量与函数的综合示例
- makefile专题:变量和不同的赋值方法
- PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
- Go语言的变量、函数、Socks5代理服务器示例详解
- makefile 中常见变量及函数
- makefile中使用变量及函数(3.注意.o输出路径问题)
- 作用域、链接属性、存储类型示例——文件之间变量、函数的关系
- makefile专题:函数定义及调用
- Makefile中的常用变量与函数
- 在Makefile中可以使用函数来处理变量
- InputBox函数和MsgBox函数综合示例
- Makefile中的路径搜索及综合示例
- 本方法学python 习题24(综合练习) 习题25(更多关于函数和变量的练习)习题26(修改程序)
- Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
- makefile常用函数和自动化变量
- InputBox函数和MsgBox函数综合示例
- Android MakeFile 常用变量/函数总结
- makefile专题:预定义变量的使用