我是靠谱客的博主 负责篮球,最近开发中收集的这篇文章主要介绍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

最后

以上就是负责篮球为你收集整理的Linux编程(6)_makefile的全部内容,希望文章能够帮你解决Linux编程(6)_makefile所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部