『Linux升级路』基础开发工具——make/Makefile篇

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

『Linux升级路』基础开发工具——make/Makefile篇,Linux,linux,运维,服务器

🔥博客主页:小王又困了

📚系列专栏:Linux

🌟人之为学,不日近则日退 

❤️感谢大家点赞👍收藏⭐评论✍️


目录

一、认识make/Makefile

📒1.1make/Makefile的优点

📒1.2make/Makefile的使用

二、依赖关系和依赖方法

📒2.1依赖关系

📒2.2依赖方法

三、make工作原理


🗒️前言:

     以前我们的代码中有多个源文件,是编译器把它们链接起来,形成可执行程序。 而在linux中,需要我们手动进行这个过程,使用gcc一个一个源文件的编译十分繁琐,这就需要我们的自动化构建工具——make/Makefile。

一、认识make/Makefile

     make是一个用于自动构建(编译和链接)程序的工具,它通过读取一个叫做Makefile的文件来确定程序的构建规则和依赖关系。Makefile包含了一系列规则,每个规则指定了如何生成一个或多个目标文件,并列出了生成这些文件所需要的依赖关系和相应的命令。

  • make是一条命令
  • Makefile是一个文件

make是一个解释Makefile中指令的命令工具,两个搭配使用,完成项目自动化构建。

📒1.1make/Makefile的优点

     一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,在VS中是编译器器将这些源文件链接起来,而在Linux中需要我们自己编译,我们也不知道哪些文件需要先编译,哪些文件需要后编译,所以我们使用了自动化构建工具—make/Makefile。

📝优点:

makeMakefile的使用可以大大简化项目的构建过程,确保只有必要的文件被重新构建,提高了项目的可维护性和可重用性。自动化编译,一旦写好,只需要一个make命令,整个工程完全自动编 译,极大的提高了软件开发的效率。

📒1.2make/Makefile的使用

  • make工具的主要作用是根据Makefile文件中的规则来自动构建项目,所以我们要先创建一个Makefile文件,这里的M大写小写都可以。

『Linux升级路』基础开发工具——make/Makefile篇,Linux,linux,运维,服务器

  • 在makefile文件中写入依赖关系和依赖方法。

『Linux升级路』基础开发工具——make/Makefile篇,Linux,linux,运维,服务器

  • make的使用

『Linux升级路』基础开发工具——make/Makefile篇,Linux,linux,运维,服务器

这里我们可能会有一个疑问,问什么形成可执行程序只需要输入make呢。这就要我们了解make的命令行语法:基本的make命令行语法是make [target],其中targetMakefile中定义的目标名。如果没有指定目标,make将执行Makefile文件中第一个依赖方法

『Linux升级路』基础开发工具——make/Makefile篇,Linux,linux,运维,服务器

二、依赖关系和依赖方法

     依赖关系指的是目标文件(target)和它所依赖的文件之间的关系,而依赖方法则是描述如何生成目标文件的规则。例如:月底,你的生活费用完了,于是你给你的老爸打电话,告诉他:“老爸,我是你儿子,我没钱啦”。给你的老爸打电话,说你是他儿子,就叫做表明依赖关系。但是只表明依赖关系,你爸并不知道你是缺钱。所以要有依赖方法,要告诉他“我没钱啦”,你把才知道要给你打钱。因此,只有依赖关系加上依赖方法,才能完成打钱这件事情。

📒2.1依赖关系

     在 Make 中,依赖关系定义了目标文件和其它文件之间的关系。一个目标文件可能依赖于一个或多个文件(称为依赖项),这些文件可以是源代码文件、头文件、或者其他目标文件。依赖关系通过规则来定义,通常具有以下形式:

target: dependencies
    commands
  • target 是目标文件的名称。
  • dependencies 是目标文件依赖的文件列表。
  • commands 是生成目标文件的命令,称为规则。

 示例:

mycode:code.c
    gcc code.c -o mycode

上述规则表示 mycode 依赖于 code.c ,生成 mycode 的命令是用gcc编译 code.c 并将输出保存为 mycode 

📒2.2依赖方法

     在 Make 中,依赖方法是指生成目标文件的具体命令或规则。上述示例中的 gcc code.c -o mycode 就是一个依赖方法。依赖方法可以包括编译、链接、拷贝等操作,具体取决于生成目标文件的需求。

  •  gcc code.c -o mycode

注意:依赖方法前面有一个Tab 

     总体来说,Make 的依赖关系和依赖方法是构建系统中非常重要的概念,通过它们可以定义项目中文件之间的关系,以及如何生成最终的可执行文件或库。

三、make工作原理

📝理解makefile

     我们要形成mycode目标文件,并不是直接依赖code.c,实际依赖的是code.o,然而我们当前目录下并没有code.o,所以我们要先形成code.ocode.o又依赖code.s,但是当前目录下也没有code.s,经过递归,我们就可以找到递归的出口code.c,然后逆向执行依赖关系。指令的执行顺序,与我们写入makefile文件的顺序是反过来的。所以,保存这些依赖关系的是一种栈式的结构

『Linux升级路』基础开发工具——make/Makefile篇,Linux,linux,运维,服务器

📝总结:

     mycode会自动推导依赖关系,然后根据依赖关系逆向执行依赖方法。由于是自动推导,所以mycode文件中的依赖方法可以是任意顺序,但是不能缺少。

📝make不能连续编译

如下图,当执行完一次make,对源代码编译后,再去执行make,就不会对源代码重新编译。 

『Linux升级路』基础开发工具——make/Makefile篇,Linux,linux,运维,服务器

这是因为我们编译得到一个可执行程序,没有在对它进行修改,就没有必要对它重新编译。那我们是怎么知道是否对源文件进行过修改的呢?

     我们对文件修改,都会有时间记录,我们通过时间就可以知道文件是否被修改过。要形成可执行文件,一定是先有源文件,再有可执行文件,所以源文件的最近修改,比可执行文件要早。如果源文件最近修改时间就比可执行文件晚,那么说明文件被修改过。

📝查看文件修改时间

  • 指令:stat  code.c

『Linux升级路』基础开发工具——make/Makefile篇,Linux,linux,运维,服务器

  • Access:文件最近一次被访问的时间,查看文件内容、修改文件内容,都属于访问文件。
  • Modify:最近一次修改文件内容的时间。
  • Change:最近一次修改文件属性的时间。

这三个时间是相互关联的,有的操作可能会同时更新多个时间。例如:修改文件的内容,那这三个时间都会更新,因为修改文件内容,首先要访问该文件,其次修改后,文件的大小会发生变化,所以这三个时间都会更新。

『Linux升级路』基础开发工具——make/Makefile篇,Linux,linux,运维,服务器

修改权限只有Change改变,上面我们修改文件内容,访问时间却没有改变,这是为什么呢?

在许多情况下,默认情况下,文件系统不会在每次文件被读取时都更新访问时间。这是为了减少磁盘I/O操作的频率,从而提高性能。

 📝手动更新文件时间

  • touch code.c:将code.c文件的所有时间更至最新。
  • touch -m code.c:将code.c文件的Modify时间更至最新
  • touch -a code.c:将code.c文件的Access时间更至最新
  • touch -c code.c:将code.c文件的Change时间更至最新

 📝.PHONY伪目标

伪目标: 用于指定一些不是真正文件名的目标,通常用于执行一些特殊的任务而不生成对应的文件。

.PHONY: clean
clean:
    rm -f mycode

 📝特殊符号

  • $@:表示标签,依赖关系冒号左边的内容。
  • $^:表示依赖的文件,依赖关系冒号右边的内容。
mytest:test.c
    gcc $^ -o $@
.PHONY:clean                                                                                                                                                                              
clean:
    rm -rf mytest

 📝变量 

变量: 可以在 Makefile 中定义变量,以方便在规则中引用。 

CC = gcc
flag = -o
mytest:test.c
    $(cc) $^ $(flag) $@
.PHONY:clean                                                                                                                                                                              
clean:
    rm -rf mytest

📝取消执行make指令时的回显

每次执行make指令,都会把对应的依赖方法回显出来,如下图:

『Linux升级路』基础开发工具——make/Makefile篇,Linux,linux,运维,服务器

我们只要在makefile文件中的依赖方法前面加上@,就可以取消回显。

CC = gcc
flag = -o
mytest:test.c
    @$(cc) $^ $(flag) $@
.PHONY:clean                                                                                                                                                                              
clean:
    @rm -rf mytest

『Linux升级路』基础开发工具——make/Makefile篇,Linux,linux,运维,服务器


🎁结语: 

     本次的内容到这里就结束啦。希望大家阅读完可以有所收获,同时也感谢各位读者三连支持。文章有问题可以在评论区留言,博主一定认真认真修改,以后写出更好的文章。你们的支持就是博主最大的动力。文章来源地址https://www.toymoban.com/news/detail-754166.html

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

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

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

相关文章

  • Linux开发工具Make/Makefile篇

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

    2024年02月12日
    浏览(34)
  • 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日
    浏览(55)
  • 【Linux】基础开发工具——make

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

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

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

    2024年02月14日
    浏览(35)
  • 『Linux升级路』基础开发工具——gdb篇

    🔥 博客主页: 小王又困了 📚 系列专栏: Linux 🌟 人之为学,不日近则日退 ❤️ 感谢大家点赞👍收藏⭐评论 ✍️ 目录 一、背景知识介绍 二、gdb指令介绍      在软件开发中,通常会有两种主要的构建配置:Debug(调试)和Release(发布)。这两种配置的存在是为了在不同

    2024年02月04日
    浏览(44)
  • 『Linux升级路』基础开发工具——vim篇

    🔥 博客主页: 小王又困了 📚 系列专栏: Linux 🌟 人之为学,不日近则日退  ❤️ 感谢大家点赞👍收藏⭐评论✍️ 目录 一、vim的基本概念  📒1.1命令模式 📒1.2插入模式 📒1.3底行模式 二、vim的基本操作 📒2.1进入vim 📒2.2模式转换 📒2.3退出vim 三、命令模式命令集 📒

    2024年02月05日
    浏览(42)
  • 『Linux升级路』基础开发工具——yum篇

      🔥 博客主页: 小王又困了 📚 系列专栏: Linux 🌟 人之为学,不日近则日退 ❤️ 感谢大家点赞👍收藏⭐评论✍️   目录 一、Linux下安装软件的方案  📒1.1源代码安装 📒1.2rpm安装 📒1.3yum安装 二、Linux 软件包管理器 yum 📒2.1什么是软件包 📒2.2关于 rzsz 📒2.3查看软件包

    2024年02月06日
    浏览(36)
  • 【Linux升级之路】2_Linux环境基础开发工具使用

    🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux升级之路】 ✒️✒️本篇内容:Linux工具学前常识,Linux编辑器vim的使用,sudo提权指令讲解/配置,Linux编译器gcc/g++的使用,项目自动化构建工具make/makefile的使用,工具实践(小程序-进度条),Linux环境下git的使用

    2023年04月14日
    浏览(37)
  • 『Linux升级路』基础开发工具——gcc/g++篇

    🔥 博客主页: 小王又困了 📚 系列专栏: Linux 🌟 人之为学,不日近则日退  ❤️ 感谢大家点赞👍收藏⭐评论✍️ 目录 一、快速认识gcc/g++  二、预处理 📒1.1头文件展开  📒1.2条件编译 二、编译 三、汇编 四、链接 📒4.1库的概念 📒4.2库的特点 📒4.3库的分类 📒4.4动态

    2024年02月05日
    浏览(38)
  • [Linux 基础] make、Makefile自动化构建工具

    make是一个命令,Makefile是一个在当前目录下存在的一个具有特定格式的文本文件。 在VS编译器中,我们在编译执行代码的时候ctrl+f5就可以了,而在linux中我们需要使用gcc/g++ 配合选项并需要正确的格式才可以完成编译,这样是比较麻烦的,我们make与Makefile可以实现自动化构建

    2024年02月06日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包