Linux编程(6)_makefile

更加详细的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 第一个版本

image.png

缺点: 效率低, 修改一个文件, 所有文件会被全部重新编译

4.2 第二个版本

image.png

工作原理:

  • 检查文件是否存在, 向下搜索下边的规则, 如果有规则是用来生成查找的依赖的, 执行规则中的命令
  • 依赖存在, 根据目标和依赖的生成时间的对比, 判断是否进行更新, 原则是目标的时间>依赖的时间, 否则进行更新

缺点: 冗余

4.3 第三个版本

  • 自定义变量: obj=a.o b.o c.o,

    obj=10

    变量的取值: aa=$(obj)

  • makefile自带的变量: 大写

    CPPFLAGS

    CC

  • 自动变量 只能在命令中使用

    • $@ : 规则中的目标
    • $< : 规则中的第一个依赖
    • $^ : 规则中所有的依赖

    image.png

    模式匹配: %.o:%.c

    第一次: main.o没有, main.o:main.c

    依次进行

    可移植性差

4.4 第四个版本

makefile中所有函数都有返回值

  • 查找指定目录下指定类型的文件wildcard, 例src=$(wildcard ./*.c)

  • 匹配替换patsubst, 例obj=$(patsubst %.c, %.o, $(src)), 表示用.o去替换src中所有.c的文件, 注意使用百分号%

    image.png

  • 缺点: 不能清理项目

4.5 第五个版本

编写清理项目的规则

# 在makefile中定义
.PHONY:clean # 声明伪目标, 防止被更新
clean:
    [-]rm $(obj) $(target) [-f]
# - 可选, 表示当前命令执行失败忽略, 继续向下执行
# -f 可选, 表示强制删除

就可以在终端执行make clean

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值