变量与函数的综合示例
2018-02-28 17:27
344 查看
1、实战需求
(1)自动生成target文件夹存放可执行文件;(2)自动生成objs文件夹存放编译生成的目标文件;
(3)支持调试版本的编译选项;
(4)考虑代码的扩展性。
2、工具原料
- $(wildcard_pattern)获取当前工作目录中满足_pattern的文件或目录列表;- $(addprefix _prefix, _names)给名字列表_names中的每一个名字增加前缀_prefix。
3、关键技巧
1、 自动获取当前目录下的源文件列表(函数调用) ;2、根据源文件列表生成目标文件列表(变量的值替换) ;
3、对每一个目标文件列表加上路径前缀(函数调用) 。
4、编译规则的依赖(important!)
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 # main.c const.c func.c SRCS := $(wildcard *.c) # main.o const.o func.o OBJS := $(SRCS:.c=.o) # objs/main.o objs/const.o objs/func.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实战时不可或缺的部分;
- 规则中的模式匹配可以直接针对目录中的文件;
- 可以使用命令行变量编译特殊的目标版本。
相关文章推荐
- makefile专题:变量与函数的综合示例
- 10-变量与函数的综合示例
- 变量与函数的综合示例
- JavaScript 中对变量和函数声明提前的示例
- PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
- 本方法学python 习题24(综合练习) 习题25(更多关于函数和变量的练习)习题26(修改程序)
- Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
- 作用域、链接属性、存储类型示例——文件之间变量、函数的关系
- InputBox函数和MsgBox函数综合示例
- 子窗口调用父窗口变量和函数示例
- Go语言的变量、函数、Socks5代理服务器示例详解
- InputBox函数和MsgBox函数综合示例
- 8.自定义函数综合应用示例
- C++ string中find() ,rfind() 等函数 用法总结及示例
- makefile 中常见变量及函数
- PHP学习笔记3 - 代码重用、函数、变量
- makefile中使用变量及函数(3.注意.o输出路径问题)
- C语言变量、函数的作用域及变量的存储方式
- 函数中变量的生存期和作用域
- java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况