Linux开发工具Make/Makefile篇

这篇具有很好参考价值的文章主要介绍了Linux开发工具Make/Makefile篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

🍈0. 前言

我们使用gcc/g++编译代码时,每次都要输入一长串的指令,对于单个文件或者文件较少的时候,我们还能接受,可是当文件较多的时候,我们再一个一个编译,就会比较麻烦。Linux中make命令加上Makefile文件搭配使用,就可以完成项目的自动化构建。

🍉1. 见见猪跑

C代码

#include<stdio.h>
int main()
{
	printf("hello linux\n");
	printf("hello linux\n");
	printf("hello linux\n");
	return 0;
}

创建makefile文件

mkdir makefile

写入依赖关系、依赖方法

code:code.c
	gcc -o code code.c
clean
	rm -f code

执行make命令

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

这一套流程下来,就是简单的自动化编译与清理,这里要清楚的是make是一个命令,而makefile是一个文件。下面我们来讲解一下这其中原理。

🍊2. 依赖关系和依赖方法

打个比方:

期末考试考完了,在路上碰见了老师,你想求老师捞一捞。上前打招呼,“老师,我是你学生xxx”,这句话就是说明你和这个老师的关系,这个就是依赖关系

答完招呼,你就说出了你的想法,“老师,捞一把,卷子我全部都写满了”,老师说“好的好的,我尽量,我尽量”。而这个向老师提出的需求就是依赖方法

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

知道了这个概念,再来看一下其中的流程,将makefile文件写的复杂一点

code:code.o
	gcc -o code code.o
code.o : code.s
	gcc -c code.s -o  code.o
code.s : code.i
	gcc -S code.i -o code.s
code.i : code.c
	gcc -E code.c -o code.i

然后我们再执行make指令:

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

我们发现,如果按顺序来执行的话,应该是先执行gcc -o code code.c,但是这个输出的顺序并不是这样,而是反正输出的。

这里其实是因为code依赖的是code.o文件,而当前目录并没有这个文件,于是需要生成一个code.o的文件,发现依赖文件中有生成code.o的依赖关系和依赖方法,依次类推。这就很像递归的过程

所以我们可以知道make会自动的推导makefile中的依赖关系,而这种过程是一种栈式的结构

Tips:

即使我们调换了其中的顺序,也可以生成,就类似调用函数,不管这个函数在哪,只要能调到就行;

但是如果这其中缺少了环节,那么就不会生成了。

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

当然了,这只是演示,在实际操作的时候,就不要写这么复杂,能一步到位就一步到位。

🍋3. 清理

当项目不要的时候,需要进行清理。我们就可以到makefile文件中写入清理的依赖关系和依赖方法:

clean:
	rm -f code code.i code.o code.s

clean不需要依赖其他的文件,依赖关系为空

执行make clean指令,就删除了我们不需要的项目文件。

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

那为啥清理的时候需要make clean呢?能不能也像创建可执行文件时,直接使用make呢?

我们将makefile文件稍微下一下,将clean移到最前面来,然后再执行make指令:

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

这样我们使用make的时候,就默认变成了清理操作。

这是因为make会自顶向下去扫描,将第一个依赖充当为默认操作

🍌4. 不可多次编译的原理

🍍4.1 原因

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

当我们多次make时,系统会提示我们code是最新的,就不让我们继续make了。

如果将code.c文件修改一下,会发现又能重新make了,但也是只能make一次。

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

出现这种情况是因为编译器认为没有必要,既然文件没有发生改变,那就没有必要再编译一次,就算编译了,也是一样的,所以为了节省资源,编译器就会选择不编译,出发这个文件内容发生改变。

VS2022为例:

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

那这是如何做到的呢?

对于源文件生成可执行程序,那么肯定是先有源文件,再有可执行程序,在这种情况下,源文件的修改时间肯定是在可执行程序之前

如果修改了源文件,那么源文件的修改时间肯定会比可执行程序要新

所以,这需要比较源文件和可执行程序的最近修改时间就行。

🍍4.2 stat命令

stat命令可以查看文件的详细信息,这里面就包含了文件的时间信息。

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

  • Access:最近访问时间(打开、查看、修改),只要我们访问了该文件,就会被记录。

只要访问文件,Access就会改变,当多人协同操作的时候,有些文件可能会被频繁的访问,如果每次访问就修改时间,那么就每次都要去磁盘修改文件的属性,这就会十分影响效率。

在较新的版本中,Access的更新策略发生了改变,会根据ModifyChange的改变或者采用计数器等方式改变。

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

  • Modify:对文件内容继续修改的时间

  • Change:文件属性改变的时间

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

文件内容改变的时候,文件属性肯定会改变;文件属性改变,不一定会改变文件内容

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

touch 文件名如果没有该文件,则创建该文件;

如果有了这个文件,则更新所以最新时间。

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

🍍4.3 验证

了解了文件的时间关系,就能够解释前面的原因了,我们来验证一下

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

🥭5. 伪目标

如果我们不想受这个的约束,想执行就执行,可采用.PHONY来修饰这个目标文件,让其是一个伪目标。

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

当然,这里不建议将我们的可执行操作设为伪目标,一般采用将清理操作设为伪目标。

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库

🍎6. 取消回显

我们使用make时,每次都会将对应的方法回显出来,如果不想要回显,我们可以将依赖方法前面加上@

另外,使用$@(:$^自动化变量,引用目标和依赖项。

Linux开发工具Make/Makefile篇,Linux,原创,linux,服务器,数据库




以上就是make的基本操作了,大伙可以根据项目的实际需求和复杂性来扩展和定制Makefile。

那本次的分享就到这里啦,如果要帮助的话希望点赞支持一下,我们下期再见,如果还有下期的话。文章来源地址https://www.toymoban.com/news/detail-528432.html

到了这里,关于Linux开发工具Make/Makefile篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】Linux环境基础开发工具的使用 ———(yum、vim、gcc&g++、gdb、make/Makefile、进度条 、git)

    (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是 Scort 🎓 🌍博客主页:张小姐的猫~江湖背景🌍 快上车🚘,握好方向盘跟我有一起打天下嘞! 送给自己的一句鸡汤🤔: 🔥集中起来的意志可以击穿顽石🔥 🙏作者水平很有限,如果发现错误,可在评论区指正,感谢🙏 🎉🎉欢迎持续关注!🎉🎉

    2024年01月16日
    浏览(50)
  • Linux开发工具大全 - 软件包管理器yum | vim编辑器 | gcc/g++编译器 | 自动化构建工具Make/Makefile | gdb调试工具

    目录 Ⅰ.  Linux 软件包管理器 yum 一、yum 背景知识 二、yum 的基本使用 1、查看软件包 2、软件包名称构成 3、安装软件 4、卸载软件 Ⅱ.vim编辑器  一、认识vim 1、vim概念  2、模式及其切换  二、vim使用 1、vim的指令(重要)  命令模式 插入模式 底行模式 2、vim配置 Ⅲ.gcc/g++编

    2024年02月05日
    浏览(52)
  • 【Linux】基础开发工具——make

    上一期分享了在Linux下编译源代码的两个工具,gcc和g++。每次编译源代码,都要输入一串很长的指令,这个过程显然是十分复杂,且容易出错的,尤其是在一些大型的项目中,源代码可能有多个,此时编译起来就会更费劲。为了解决上面的问题,今天就给大家分享一个,Linu

    2024年02月16日
    浏览(35)
  • 【Linux取经路】基础开发工具——make

    上一期分享了在Linux下编译源代码的两个工具,gcc和g++。每次编译源代码,都要输入一串很长的指令,这个过程显然是十分复杂,且容易出错的,尤其是在一些大型的项目中,源代码可能有多个,此时编译起来就会更费劲。为了解决上面的问题,今天就给大家分享一个,Linu

    2024年02月14日
    浏览(33)
  • Linux 开发工具vim、gcc/g++、makefile

    目录 Linux编辑器-vim 1. 基本概念 2. 基本操作 3. 正常模式命令集 4. 末行模式命令集 5. 其他操作 6. 简单vim配置 Linux编译器-gcc/g++ 1、基本概念  2、程序翻译的过程 3. gcc如何完成程序翻译 4、动静态库  Linux项目自动化构建工具-make/Makefile 1、背景 2、创建makefile 3、原理 5、项目清

    2024年03月11日
    浏览(63)
  • Linux开发工具:yum、vim、gcc/g++、makefile

    在 Linux 下安装软件一共有三种方式: 源代码安装 有很多开源软件的源代码会被作者放在Github/Gitee 等网站上, 可以将这些源代码下载在本地. 通过直接在本地将这些源代码进行编译链接生成可执行程序 . 在嵌入式编程中, 经常用到交叉编译来处理不同平台的适配性. rpm包直接安装

    2024年01月19日
    浏览(44)
  • Linux中的开发工具(yum,vim,gcc/g++,gdb,Makefile,git)

    yum(Yellow dog Updater,Modified)是Linux下非常常用的一种 包管理器 。主要应用在Fedora,RedHat,Centos等发行版上。 和手机上的软件商店类似,我们可以使用 yum 来下载各种我们想要的软件包。使用 yum 时必须联网。 yum 基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装

    2024年02月08日
    浏览(43)
  • Linux工具make与makefile

    自动化构建工具 make / Makefile 是一个备受关注的话题。在现代软件开发中,构建和部署过程越来越复杂,需要更加高效和自动化的工具来帮助开发人员管理项目。 Make / Makefile 就是这样一种工具,它可以通过定义规则和依赖关系来自动化地构建项目。本文将介绍 make / Makefile 的

    2023年04月19日
    浏览(35)
  • 【Linux】Linux项目自动化构建工具-make/makefile

    🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门到精通 🎉代码仓库:小智的代码仓库 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需

    2024年02月12日
    浏览(61)
  • 【Linux工具篇】项目自动构建化工具-make/Makefile

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【Linux专栏】🎈 本专栏旨在分享学习Linux的一点学习心得,欢迎大家在评论区讨论💌 make是一个命令,而Makefile是当前目录的一个文件 。 make/Makefile 是完成大型项目非常

    2024年02月16日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包