【Linux】Makefile的简述

news2024/10/7 8:30:47

目录

前言:

一、Makefile的规则

二、Makefile的函数语法

(1)通配符pattern

​(2) 删除clean

​(3) 立即变量、延时变量

(4) Makefile常用函数


3-1.Makefile要达到的效果_哔哩哔哩_bilibili 3-2.Makefile的引入及规则_哔哩哔哩_bilibili

3-3.Makefile的语法_哔哩哔哩_bilibili

前言:

学习的过程中,认知Makefile的作用,了解其基本的语法和规则,看得懂和能够使用通用Makefile来减轻实际项目中的工作量即可。

(1)采用gcc命令对多个.c文件编译时,以下面的为例,它需要依次编译a.c和b.c,如果对其中的文件进行修改,它又得把所有的文件重新编译一遍,这个是没有必要的。

 (2)上面的方式,应对大程序的时候,就非常的不方便。我们修改源文件或头文件时,重新编译牵涉到的文件,就重新生成应用程序---这个是比较高效的编译方式。

(3)应用上面的方式,在Linux中经常使用make命令来编译程序,make命令所执行的动作依赖于MakeFile文件。

(4)Makefile的基本原理:通过比对目标文件和依赖文件的修改时间,判断是否已修改,依赖文件较新时执行相应的动作。 

(5)现有通用Makefile的作用:

  • ①支持多个目录、多层目录、多个文件
  • ②支持给所有文件设置编译选项
  • ③支持给某个目录设置编译选项
  • ④支持给某个文件单独设置编译选项

一、Makefile的规则

当我们执行make命令时,会去寻找当前目录下的Makefile文件,并根据它的指示去执行操作,生成第一个目标。

一个简单的Makefile规则样式如下:

目标 (target) : 依赖 (prerequiries)
<tab> 命令 (command)
如果“依赖文件”比“目标文件”更加新或者目标文件不存在,那么执行“命令”来重新生成“目标文件”。
具体的样例如下:
当我们修改a.c文件时,重新编译a.c以及重新链接生成相应的程序。

二、Makefile的函数语法

(1)通配符pattern

通配符(pattern):精简相似规则

$@ :表示目标        $<:表示第一个依赖文件        $^:表示所有的依赖文件

test: a.o b.o c.o
        gcc -o test $^

%.o : %.c
        gcc -c -o $@ $<

(2) 删除clean

用于删除目标文件。

 clean:
        rm *.o test

.PHONY: clean

(3) 立即变量、延时变量

A = xxx // 延时变量,使用到时才确定

B ?= xxx // 延时变量,只有第一次定义时赋值才成功;如果曾定义过,此赋值无效
C := xxx // 立即变量,在定义时即确定
D += yyy // 如果 D 在前面是延时变量,那么现在它还是延时变量;

 上面的变量,做个小的测试。

根据上面的阐述,相应的A、B以及C的输出结果如下:

(4) Makefile常用函数

//对于list中每一个元素赋给var,然后把var改为text描述的形式
$( foreach var,list,text)
//pattern所列出的文件是否存在,把存在的文件都列出来
$( wildcard pattern)
//在text中取出符合(不符合)pattern格式的值
$( filter pattern...,text)
$( filter-out pattern...,text)
//寻找text中符合pattern格式的字,用replacement替换它们
$( patsubst pattern,replacement,text)

上面的函数做个小的测试应用。

相应的结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/416042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第11章_常用类和基础API

第11章_常用类和基础API 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题与脉络 1. 字符串相关类之不可变字符序列&#xff1a;String 1.1 String的特性 java.lang.String 类代表字符串…

vue之--使用TypeScript

搭配 TypeScript 使用 Vue​ 像 TypeScript 这样的类型系统可以在编译时通过静态分析检测出很多常见错误。这减少了生产环境中的运行时错误&#xff0c;也让我们在重构大型项目的时候更有信心。通过 IDE 中基于类型的自动补全&#xff0c;TypeScript 还改善了开发体验和效率。…

2023年美赛春季赛 Y题详细思路

由于今年各种各样的原因&#xff0c;导致美赛头一次&#xff0c;据说也将是最后一次&#xff0c;临时调整&#xff0c;加设春季赛。这对于急需建模奖项的大家来说是一个很好的机会。无论怎样的原因&#xff0c;今年美赛我们可能有所遗憾。但&#xff0c;春季赛也许就是弥补遗憾…

HTML4.1表单标签

input&#xff08;登录、注册、搜索功能&#xff09; type属性值类型称号展示类型text文本框placeholder占位符password密码框placeholder占位符radio单选框name checked&#xff08;默认选中&#xff09;同类型单选checkbox复选框 checked file 文件选择multiple多文件选择s…

分类预测 | MATLAB实现CNN-GRU-Attention多输入分类预测

分类预测 | MATLAB实现CNN-GRU-Attention多输入分类预测 目录分类预测 | MATLAB实现CNN-GRU-Attention多输入分类预测分类效果模型描述程序设计参考资料分类效果 模型描述 Matlab实现CNN-GRU-Attention多变量分类预测 1.data为数据集&#xff0c;格式为excel&#xff0c;12个输…

集合-LinkedList

LinkedList LinkedList的概述 LinkedList的底层使用双向链表实现。 链表是一种线性数据结构&#xff0c;其中每个元素都是一个单独的对象&#xff0c;包含一个指向列表中下一个节点的引用。 它可以用于实现各种抽象数据类型&#xff0c;例如列表、堆栈、队列等。 LinkedLis…

安装Nginx——docker安装

使用docker安装Nginx 1.开启docker systemctl start docker docker search nginx[rootlocalhost ~]# systemctl start docker //开启docker [rootlocalhost ~]# docker search nginx //搜素镜像 2. docker pull nginxdocker imagesdocker run -…

如何将录音转成文字?

在现代社会中&#xff0c;随着语音技术的不断发展和普及&#xff0c;将录音转换为文字变得越来越容易。无论是为了记录会议、面试、讲座、采访&#xff0c;还是为了记录个人的思考和想法&#xff0c;将录音转换为文字是一种方便快捷的方式。本文将介绍几种将录音转换为文字的方…

计算机系统结构教程-第七章-储存系统笔记(1)

7.1储存系统的层次结构 概述 理想的储存器&#xff1a;容量大、速度快、价格低。 但以上三种要求在实际应用中是相互矛盾&#xff1a; &#xff08;1&#xff09;速度快&#xff0c;价格高。 &#xff08;2&#xff09;容量大&#xff0c;价格低。 &#xff08;3&#xf…

ESLint检测VUE和JSON文件

ESLint 默认只支持检测JS文件中的文件&#xff0c;无法识别其它类型的文件&#xff0c;如果需要检测其它类型的文件就需要安装并指定对应的处理器&#xff0c;有点类似webpack的loader 处理vue文件 使用ESLint默认的处理器处理Vue文件大多数情况下会收到一个这样的错误。 Pa…

贪心算法

章节目录&#xff1a;一、算法介绍二、应用场景-集合覆盖问题2.1 问题引出2.2 思路分析2.3 代码示例三、结束语一、算法介绍 贪心算法&#xff08;greedy algorithm &#xff0c;又称贪婪算法&#xff09;是指&#xff0c;在对问题求解时&#xff0c;总是做出在当前看来是最好的…

Vue04_事件绑定_methods

v-on:事件名"表达式" methods: 定义回调函数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><div id"app"><!--eve…

12、Qt生成dll方式-libs方式使用

Qt创建dll&#xff0c;使用LIBS -L$PWD -lxxx的方式调用dll 一、创建项目 1、打开Qt->新建文件->其他项目->Empty qmake Project->Choose... 2、输入项目名->选择位置->下一步 3、MinGW->下一步 4、默认&#xff0c;完成 5、在.pro中添加TEMPLATE sub…

C51单片机按键控制流水灯模式(定时器版本)以及定时器时钟

上篇文章我们学了关于定时器的三大组成部分及许多寄存器的概念问题&#xff0c;这篇文章我们就要开始讲解实操部分。 首先&#xff0c;我们先来看看本文最后写成的代码&#xff1a; 以上三张是代码的主函数&#xff0c;此外&#xff0c;代码中还需用到的独立按键检测代码在下面…

【Linux】回车与换行的区别+简单实现倒计时和进度条(学以致用)

前言&#xff1a;本文主要讲解回车与换行的区别&#xff0c;理解完回车与换行的区别后&#xff0c;我们将带大家实现一个简单的倒计时程序&#xff0c;会利用到本文学习的回车与换行&#xff0c;做到学以致用。 文章目录一.理解回车与换行(1)\r和\n都存在(2)\r和\n都不存在(3) …

单片机作业第4章

1.SJMP rel 无条件跳转指令 rel是相对偏移量&#xff0c;是一个单字节的带符号8位二进制补码数&#xff0c;所以它能实现的程序跳转是双向的。 2. (单选题, 2分)当CPU响应外部中断0 (INT0)的中断请求后&#xff0c;程序计数器PC的内容是 &#xff08; A &#xff09; 。 A…

性能优化之-事件代理

js中的事件委托或是事件代理简单理解 事件委托也叫事件代理&#xff0c;“事件代理”即是把原本需要绑定在子元素的响应事件&#xff08;click、keydown…&#xff09;委托给父元素&#xff0c;让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。 概述&#x…

Direct3D 12——灯光——法向量

a:平面法线着色 b:顶点法线着色 c:像素着色 平面法线&#xff08;face normal,由于在计算机几何学中法线是有方向的向量&#xff0c;所以也有将normal译作法向量&#xff09; 是 一种描述多边形朝向&#xff08;即正交于多边形上所有点&#xff09;的单位向量。 曲面法线&a…

[C++]vector类的模拟实现和相关函数的详解

文章目录架构实现默认构造函数构造函数拷贝构造为什么不能使用memcpy()进行拷贝&#xff08;浅拷贝问题&#xff09;析构函数赋值重载[]迭代器begin && end操作函数size() && capacity()push_back()reserve()resize()insert()erase()完整代码架构 首先由于自定…

RabbitMQ消息队列实战(4)—— spring-boot-starter-amqp中消息的可靠性传输和确认机制

在上一篇文章中&#xff0c;笔者整理了从消息生产出来到消费结束的整个生命周期过程中&#xff0c;为了确保消息能够可靠到达或者消费&#xff0c;我们需要在哪些环节进行哪些处理&#xff0c;同时也展示了使用Java原生代码怎么样在这些环节进行处理。本文主要介绍使用spring b…