Linux项目自动化构建工具-make/Makefile (linux第六课)

news/2025/2/25 10:13:01

目录

背景

介绍

依赖关系的格式

依赖方法的格式

原理


背景

  • 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
  • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,
  • makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂 的功能操作
  • makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

介绍

        make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

        make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

        makefile就是依赖关系和依赖方法的集合.

图片解析

依赖关系的格式

目标文件 : 依赖文件列表

依赖方法的格式

tab 依赖方法

就是先写tab,再写依赖方法

原理

make是如何工作的,在默认的方式下,也就是我们只输入make命令。那么,

        1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。

        2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“hello”这个文件, 并把这个文件作为最终的目标文件。

        3. 如果hello文件不存在,或是hello所依赖的后面的hello.o文件的文件修改时间要比hello这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成hello这个文件。

        4. 如果hello所依赖的hello.o文件不存在,那么make会在当前文件中找目标为hello.o文件的依赖性,如果 找到则再根据那一个规则生成hello.o文件。(这有点像一个堆栈的过程)

        5. 当然,你的C文件和H文件是存在的啦,于是make会生成 hello.o 文件,然后再用 hello.o 文件声明 make的终极任务,也就是执行文件hello了。

        6. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文 件。

        7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错, 而对于所定义的命令的错误,或是编译不成功,make根本不理 

        8. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起, 我就不工作啦。

项目清理

习题

这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助❤

欢迎各位点赞,收藏和关注哦❤

如果有疑问或有不同见解,欢迎在评论区留言哦❤

后续我会一直分享双一流211西北大学软件(C,数据结构,C++,Linux,MySQL)的学习干货以及重要代码的分享


http://www.niftyadmin.cn/n/5865366.html

相关文章

【杂谈】-强化学习遇见链式思维:将大型语言模型转变为自主推理代理

强化学习遇见链式思维:将大型语言模型转变为自主推理代理 文章目录 强化学习遇见链式思维:将大型语言模型转变为自主推理代理1、LLMs中自主推理的必要性1.1 传统LLMs的局限性1.2 链式思维(CoT)提示的不足1.3 推理中强化学习的必要…

sklearn中的决策树-分类树:剪枝参数

剪枝参数 在不加限制的情况下,一棵决策树会生长到衡量不纯度的指标最优,或者没有更多的特征可用为止。这样的决策树 往往会过拟合。为了让决策树有更好的泛化性,我们要对决策树进行剪枝。剪枝策略对决策树的影响巨大,正确的剪枝策…

CoralStyle CLIP 技术浅析(四):多层次特征融合

CoralStyle CLIP 是一种结合了 CLIP(Contrastive Language–Image Pretraining)和 CoralStyle 多风格图像生成技术的模型。其核心在于通过多层次特征融合技术,将文本和图像的特征进行高效融合,从而实现跨模态的语义对齐和风格化生成。 1. 多层次特征提取 1.1 图像特征提取…

ELK之elasticsearch基本使用教程

文章目录 ELK包含技术elasticsearch基本介绍倒排索引正向索引倒排索引正向和倒排 es的一些概念文档和字段索引和映射mysql与elasticsearch 安装es、kibana创建网络加载镜像安装分词插件 索引库操作mapping映射属性索引库的CRUD创建索引库和映射基本语法:示例&#x…

23种设计模式的cpp举例

下面介绍经典的23种设计模式,并分别用C示例代码加以说明。本文分为三大类:创建型模式、结构型模式和行为型模式,每种模式简要说明其意图、关键思想和优缺点,并给出一个精简的C代码示例。 一、创建型模式 创建型模式关注对象的创建…

使用dict对嵌套列表进行求和及优化案例

文章目录 案例背景示例数据 使用 dict 求和步骤说明代码实现 优化说明 在数据处理和分析中,经常需要将嵌套列表中的数据进行汇总和计算。 本文将通过一个实际案例,展示如何使用 dict 和 dict.get() 方法对嵌套列表进行求和操作。 案例背景 假设你是一名…

20分钟 Bash 上手指南

文章目录 bash 概念与学习目的第一个 bash 脚本bash 语法变量的使用位置参数管道符号(过滤条件)重定向符号条件测试命令条件语句case 条件分支Arrayfor 循环函数exit 关键字 bash 脚本记录历史命令查询文件分发内容 bash 概念与学习目的 bash&#xff0…

吐血整理:在 Docker 中运行 Milvus

直接用docker 错误命令(这个我试了三遍,浪费了很多时间): docker run -d --name milvus -p 19530:19530 -p 9091:9091 -v /var/lib/milvus:/var/lib/milvus milvusdb/milvus:latest 先看报错: 2025-02-24 16:02:39 …