【Linux】快速上手自动化构建工具make/makefile

简介: 【Linux】快速上手自动化构建工具make/makefile

前言

本篇文章可以快速让你具备编写makefile的能力,并快速上手使用。


欢迎大家📂收藏📂以便未来做题时可以快速找到思路,巧妙的方法可以事半功倍。

=========================================================================

GITEE相关代码:🌟fanfei_c的仓库🌟

=========================================================================


1.什么是make / makefile

make是一条命令,makefile是一个文件,两者搭配使用就可以完成项目自动化构建(类似VS编译器(集成开发环境)的自动化编译)。

make会在当前目录下寻找名字叫"Makefile"或"makefile"的文件,并根据文件内容执行相关指令。

注:文件名必须为上面其一。


2.如何使用make / makefile

(1)我们来看makefile如何写?

首先我们用vim写一段代码,命名为mytest.c。

平时我们想要编译该.c文件如何做呢?

gcc -o mybin mytest.c

但我们知道平时所用的比如VS编译器可不仅仅干了这一个工作,还有比如工程清理(即清理解决方案,清理目标文件的意思)等工作。

这时候就需要makefile出手了,这也是为什么叫自动化构建的原因。

在makefile中我们要按照如下格式书写语句:

mybin:mytest.c                     //依赖关系

       gcc -o mybin mytest.c  //依赖方法

mybin为目标文件,mytest.c为依赖文件,当然不一定只有这一个依赖文件。

注:第二行缩进不可去。

我们把刚才提到的工程清理加上:

另外我们还可以利用$@代表目标文件(mybin),$^代表所有依赖文件(mytest.c)

到这里还不够,我们要再讲一下如果mytest.c没有改变,那么make执行会重新编译生成新的目标文件mybin么?

答案是不会:如果目标文件所依赖的后面的依赖文件列表中有文件修改时间比目标文件新,那么make就会执行后面所定义的命令生成新的目标文件,否则不会。

那clean呢?

如果我们直接输入make,由于clean没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,所以我们需要使用make clean指令。

但还有另一个问题:

如果当前目录没有clean的同名文件,那还好,不影响每次make都会执行clean。

但一旦当前目录有一个clean的同名文件,此时clean又没有依赖文件,那就麻烦大了,make clean会检测依赖文件列表中的文件有没有clean新,但是clean没有依赖文件,目标文件被认为是最新的,这就导致clean就不会被执行了。

解决方法是将目标文件clean设置为伪目标,用.PHONY修饰。

  • 伪目标的特性是:总会被执行的。

所以最终makefile中我们一般这样写:

(2)如何与make搭配使用?

保存好前面的makefile后,我们直接在命令行输入make。

make后我们再查看当前目录,会发现多出了目标文件mybin。

./mybin 执行该目标文件

我们看该目标文件成功执行。

那我们再来试一下make clean:

我们发现make clean也可以成功执行。

=========================================================================

看到这,你已经掌握了make/makefile的基本用法

=========================================================================


3.make和makefile是如何知道可执行程序是比较新的?

对比时间,如果可执行程序.exe修改时间比所有.c文件修改时间新,说明他就是最新的。

那么我们来认识下linux下文件时间的概念:

首先利用stat命令查看某个文件的信息。

我们发现了三个时间:

  • Access  ---   访问时间(非实时更新,占用内存)
  • Modify   ---   修改时间(针对内容的修改)
  • Change ---   改变时间(针对属性的修改)

文件是由内容+属性构成。  


=========================================================================

如果你对该系列文章有兴趣的话,欢迎持续关注博主动态,博主会持续输出优质内容

🍎博主很需要大家的支持,你的支持是我创作的不竭动力🍎

🌟~ 点赞收藏+关注 ~🌟

=========================================================================

目录
相关文章
|
2天前
|
Linux Shell C语言
Linux:自动化构建 - make
Linux:自动化构建 - make
10 1
|
4天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
21 5
|
4天前
|
安全 Linux Python
Volatility3内存取证工具安装及入门在Linux下的安装教程
Volatility3内存取证工具安装及入门在Linux下的安装教程
Volatility3内存取证工具安装及入门在Linux下的安装教程
|
5天前
|
数据可视化 小程序 Linux
【Linux】自动化构建工具make/Makefile和git介绍
【Linux】自动化构建工具make/Makefile和git介绍
13 0
|
5天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
13 3
|
6天前
|
缓存 Linux
linux性能分析之内存分析(free,vmstat,top,ps,pmap等工具使用介绍)
这些工具可以帮助你监视系统的内存使用情况、识别内存泄漏、找到高内存消耗的进程等。根据具体的问题和需求,你可以选择使用其中一个或多个工具来进行内存性能分析。注意,内存分析通常需要综合考虑多个指标和工具的输出,以便更好地理解系统的行为并采取相应的优化措施。
27 6
|
29天前
|
数据采集 存储 API
网络爬虫与数据采集:使用Python自动化获取网页数据
【4月更文挑战第12天】本文介绍了Python网络爬虫的基础知识,包括网络爬虫概念(请求网页、解析、存储数据和处理异常)和Python常用的爬虫库requests(发送HTTP请求)与BeautifulSoup(解析HTML)。通过基本流程示例展示了如何导入库、发送请求、解析网页、提取数据、存储数据及处理异常。还提到了Python爬虫的实际应用,如获取新闻数据和商品信息。
|
2月前
|
数据采集 机器学习/深度学习 算法框架/工具
利用Python实现基于图像识别的自动化数据采集系统
本文介绍了如何利用Python编程语言结合图像识别技术,构建一个自动化的数据采集系统。通过分析图像内容,实现对特定信息的提取和识别,并将其转化为结构化数据,从而实现高效、准确地采集需要的信息。本文将详细讨论系统的设计思路、技术实现以及应用场景。
|
2月前
|
Web App开发 Python
在ModelScope中,你可以使用Python的浏览器自动化库
在ModelScope中,你可以使用Python的浏览器自动化库
18 2
|
2月前
|
存储 BI 数据处理
Python自动化 | 解锁高效办公利器,Python助您轻松驾驭Excel!
Python自动化 | 解锁高效办公利器,Python助您轻松驾驭Excel!

热门文章

最新文章