概述
更加详细的makefile教程, https://blog.csdn.net/ruglcc/article/details/7814546
1 make
gcc - 编译器, 按照某种规则编译你的代码
make - linux自带的构建器
- 构建的规则在makefile中
2 makefile文件命名
- makefile
- Makefile
3 makefile中的规则
gcc a.c b.c c.c -o app
这个命令如何转化为makefile中的规则呢
分为三部分: 目标, 依赖, 命令
目标:依赖
(tab缩进)命令
转化-------------------------------------->
app:a.c b.c c.c
gcc a.c b.c c.c -o app
makefile中可以有多条规则
执行make
就可执行makefile中的命令
4 makefile的编写
4.1 第一个版本
缺点: 效率低, 修改一个文件, 所有文件会被全部重新编译
4.2 第二个版本
工作原理:
- 检查文件是否存在, 向下搜索下边的规则, 如果有规则是用来生成查找的依赖的, 执行规则中的命令
- 依赖存在, 根据目标和依赖的生成时间的对比, 判断是否进行更新, 原则是目标的时间>依赖的时间, 否则进行更新
缺点: 冗余
4.3 第三个版本
自定义变量: obj=a.o b.o c.o,
obj=10
变量的取值: aa=$(obj)
makefile自带的变量: 大写
CPPFLAGS
CC
自动变量 只能在命令中使用
- $@ : 规则中的目标
- $< : 规则中的第一个依赖
- $^ : 规则中所有的依赖
模式匹配: %.o:%.c
第一次: main.o没有, main.o:main.c
依次进行
可移植性差
4.4 第四个版本
makefile中所有函数都有返回值
查找指定目录下指定类型的文件
wildcard
, 例src=$(wildcard ./*.c)
匹配替换
patsubst
, 例obj=$(patsubst %.c, %.o, $(src))
, 表示用.o去替换src中所有.c的文件, 注意使用百分号%缺点: 不能清理项目
4.5 第五个版本
编写清理项目的规则
# 在makefile中定义
.PHONY:clean # 声明伪目标, 防止被更新
clean:
[-]rm $(obj) $(target) [-f]
# - 可选, 表示当前命令执行失败忽略, 继续向下执行
# -f 可选, 表示强制删除
就可以在终端执行make clean
最后
以上就是负责篮球为你收集整理的Linux编程(6)_makefile的全部内容,希望文章能够帮你解决Linux编程(6)_makefile所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复