带你去了解什么是makefile文件

article/2025/9/26 21:00:18

GNU make命令是用来控制从源文件生成可执行文件或非可执行文件的方式。那么make命令又是通过makefile文件来控制了。所以了解makefile文件就显得很有必要了。
makefile文件由许多规则组成,这些规则的形式一般是这样的:

目标 ... : 先决条件 ...命令

目标:它一般是一个由程序产生的文件的名字,比如说目标文件的名字或可执行文件的名字。它也可以是一些动作的名字,比如“clean”

先决条件是用来了创建目标文件的文件,一个目标文件通过依赖几个文件。
命令是make执行的动作,可能包含多个命令。它们写在同一行或者各自一行。在每个命令前,我们要按一下tab键。命令就是用先决条件中的文件来创建,如果先决条件的文件有改变,命令就会被重新执行生成新的目标文件。

也有些规则的形式也不一定需要有先决条件,比如说“clean”目标,它包含删除的命令,它就不需要有什么先决条件,如下面:

请添加图片描述
执行make就会默认执行makefile第一条规则,第一条规则的先决条件中依赖的文件会被生成出来。如果只想生main.o,那么make命令可以这么写make main.o,对于log.o同理。
请添加图片描述
执行make clean
请添加图片描述

OK,小结一下。一条makefile规则包含三部:

  • 目标文件
  • 先决条件,即生成目标的先决条件,一般都是文件
  • 命令,make会使用这些命令去利用先决条件去生成目标文件。这些命令只知道如何去更新目标文件

有一些目标不一定有先决条件,如上面的clean目标,它不会依赖任何先决条件,它是一个动作,我们可以告诉它要干什么。比如上面的clean,我们让它删除掉所有生成的文件。

make程序是如何处理makefile文件的?

默认情况下,make以第一个目标开始。所以makefile的第一个目标也叫默认目标。下面的makefile,main就是第一个目标。如果希望改变这个行为,让它默认在某个目标上可以使用.DEFAULT_GOAL重新指定。如:
在这里插入图片描述
看看效果:
请添加图片描述
当make命令执行时,它会在读取当前目录中的makefile文件,然后从第一个目标开始行(默认),在完成第一个目标前,它必须把目标所依赖的先决条件的文件都生成了,先决条件里的文件又是一些目标,所以必须在它们各自的规则里生成。

makefile中的变量,如前面cxx变量,引用时,只需要$(变量名)

make的推断能力

在真实生产中,更多使用make的推断能力。因为它有条隐藏式的规则去更新*.o目标文件,根据相应的*.cpp(对于c语言就是*.c),所以上面的makefile就可以用下面的写法:
请添加图片描述
在执行make时,就可以看到那些隐藏的规则了:
请添加图片描述
此处顺便附上GNU make的一个例子:
请添加图片描述
上面这个例子还可以下面的来表达。
请添加图片描述

Makefiles 包括五样东西:

  1. 显式的规则:告诉make什么时候和怎样生成一个或多个文件,这些文件叫做目标。它的先决条件中会列出目标所依赖的文件,然后会有用于创建或更新目标的命令
  2. 隐藏式的规则 : 这条规则不用我们写,它会基于它们的目标文件找到它们依赖的文件,并用那些文件来生成目标文件。如现在需要main.o目标文件,那么就会用main.cpp来生成。
  3. 变量定义,给一个变量赋一些文本字符值,在makefile文件里就可以使用它的值。
  4. 命令,让make做一些操作,如读取其他makefile文件,决定是使用还是忽略makefile的部分内容等等,
    读取取他makefile文件的命令:include filenames... ,如果想让make忽略某个makefile文件,命令则是-include filenames...
  5. 注释,以#字符开头。

请添加图片描述
在makefile中如果一行太长,可以换行,但是要在行尾加上\。这样make才会认为下一行与上一行是一起的,要一起使用的。如:
请添加图片描述
.INCLUDE_DIRS可以用来指定make的搜索路径。

关于makefile还有很多内容,可以留意我后续的文章。


http://chatgpt.dhexx.cn/article/obSIGk0n.shtml

相关文章

linux下制作makefile文件

1.最简单的一种当然也是最麻烦的一种(makefile 中的代码如下,其中hello.cpp是文件名,hello是编译后的命名。使用方法是直接输入 make) hello:hello.cpp …

编写 Makefile文件 (一)

参考:《linux程序设计(第四版)》 本文的编写从简单到复杂,一步一步完成Makefile文件的编写和完善。首先看一下我们的程序有哪些文件: 文件内的程序也很简单,就是输出该文件已经被调用,代码如下…

如何编写makefile文件

文章目录 1. makefile文件的作用2. makefile文件编写格式C代码举例编写makefile文件 3. makefile编写习惯优化使用中间文件定义变量自动变量通配符假想目标 1. makefile文件的作用 在很多的生产环境中,一个项目的运行往往要有很多源程序文件生成最终的可执行文件&am…

Linux下makefile文件的编写

在学习如何编写makefile文件之前,我们首先需要了解什么是makefile文件: makefile描述了整个工程的编译和链接等规则。它指明了哪些文件需要先编译,哪写文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。…

Makefile文件详解一(怎么在Windows下使用Makefile文件)

前言:如果熟悉在Linux开发的话,肯定知道Makefile文件的用处,它给我们带来很多的便利。在Linux系统下并不会像Windows那么多开发工具,在Windows下,只要在开发工具上点击一个按钮,就能将工程的所有源码进行编…

makefile文件编写

makefile文件用于管理和组织代码工程的编译和链接,其不是可执行文件,其被make工具解析并完成相关动作,下面笔者将介绍makefile中常用的一些语法说明: 1、文件包含: 语法:include 文件名 作用:…

make中makefile文件的创建和使用

Makefile文件就是一种定义规则的文件,规则不同但格式基本相同,如图 一个makefile中有多个规则,但最终形成一个makefile文件,且只有一个终极目标,第一行就是终极目标。 格式: 1.目标文件:(如mai…

【Linux基础】如何编写Makefile文件?

文章目录 前言一、make工具简介1.什么是make?2.如何安装make? 二、编写Makefile文件1.文件组成2.工作原理3.Makefile文件优点4.单级目录下的Makefile文件编写5.多级目录下的Makefile文件编写 总结 前言 我们刚开始在Linux系统下进行编程时,采用的编译方法为&#…

从0开始教你编写Makefile文件

目录 编写Makefile第一步,了解什么是Makefile? 编写Makefile第二步,明白编译链接过程 编写Makefile第三步,实现简单的Makefile(生成单个可执行文件) 解释一下一个简简单单的make都干了什么? 编写Makefile第四步&am…

C语言makefile文件

文章目录 一、makefile的编写二、make命令三、makefile文件中的变量四、应用经验五、课后作业六、版权声明 在软件的工程中的源文件是很多的,其按照类型、功能、模块分别放在若干个目录和文件中,哪些文件需要编译,那些文件需要后编译&#xf…

【Linux】Makefile文件

1.Makefile的作用 Makefile文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,可以实现自动化编译,一旦写好,只需要一个make命令,整个工程完全自动编译&#xff0…

计算一幅图像的信噪比

计算一幅图像的信噪比 适用情况计算步骤附matlab代码example计算结果计算峰值信噪比 大家好,这是我两年前写的一篇博客修正版本,本来打算删掉了,但是阅读量很多,可能对大家会有一点小小的帮助,就重新放上来吧。 适用情…

两种常用的全参考图像质量评价指标——峰值信噪比(PSNR)和结构相似性(SSIM)

原文:https://blog.csdn.net/zjyruobing/article/details/49908979 1.PSNR(Peak Signal to Noise Ratio)峰值信噪比: MSE表示当前图像X和参考图像Y的均方误差(Mean Square Error),H、W分别为图…

图像信噪比的理解

图像的信噪比和图像的清晰度一样,都是衡量图像质量高低的重要指标。图像的信噪比是指视频信号的大小与噪波信号大小的比值,其公式为: S/N(信噪比) 20 log (信号/噪声)dB信噪比大,图像画面就干净&#xff0…

相机的信噪比

在图像传感器的成像过程中,真实的信号是无法探测到的理想值。在成像过程中理想值被引入了一系列的不确定性,最终形成读出信号也即图像。此过程中的不确定性被统一称为噪声。而信号与噪声的比值被定义为信噪比(Signal-to-NoiseRatio, SNR&…

信噪比(SNR)

信噪比(Signal-to-noise ratio,缩写为 SNR 或 S/N),也称作信杂比或讯杂比。 信噪比,为有用信号功率(Power of Signal)与噪声功率(Power of Noise)的比。因此为幅度(Amplitude)比的平方&#xff…

信干噪比、信噪比

信干噪比 名词定义 信干噪比SINR(Signal to Interference plus Noise Ratio),指的是系统中信号与干扰和噪声之和的比。 信号是指来自设备外部需要通过设备进行处理的电子信号。 干扰是指系统本身以及异系统带来的干扰,如同频干扰…

图像的峰值信噪比(peak signal to noise ratio, PSNR)

峰值信噪比(PSNR)是一个表示信号最大可能功率和影响它的表示精度的破坏性噪声功率的比值的工程术语。由于许多信号都有非常宽的动态范围,峰值信噪比常用对数分贝单位来表示。 在图像处理中,要对图像进行客观的评价,常…

图像处理随笔之峰值信噪比(peak signal to noise ratio)

图像处理随笔之峰值信噪比(peak signal to noise ratio) the definition from WIKI:an engineering term for the ratio between the maximum power of a signal and the power of corrupting noise that affects the fidelity of its repre…

python求不同分辨率图像的峰值信噪比,一文搞懂

可以使用 Python 的 NumPy 和 OpenCV 库来实现这个任务。提前准备一张图片作为素材。 文章目录 什么是峰值信噪比PSNR 峰值信噪比补充说明 使用 OpenCV 库来实现这个任务PSNR 的计算值受图像的亮度影响计算不同分辨率图像的 PSNRpython 求不同分辨率图像的峰值信噪比 | 其他知识…