【Linux】Linux下的项目自动化构建工具——make和makefile

这篇具有很好参考价值的文章主要介绍了【Linux】Linux下的项目自动化构建工具——make和makefile。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

❤️前言

        大家好,好久不见!今天小狮子为大家带来的文章是一篇关于Linux下的项目自动化构建工具——make和makefile的博客,希望能帮助到大家。

正文

        当我们进行涉及多文件的工程开发时,我们需要对很多不同类型、不同功能,存在于不同目录下的源文件进行编译操作,这时错综复杂的文件关系会对我们造成很大的麻烦。那么这时我们就需要使用到make和makefile这样的自动化构建工具。

        我们先大致地对make和makefile进行描述:

        makefile是一个文件,其中定义了各个源文件的编译规则,比如说哪个文件应该先编译,哪个文件应该后编译,哪些文件需要重新编译等。除此之外,在makefile中还可以进行一些功能操作,例如对工程中的老旧文件进行清理。

 

        make是一条指令,它可以解析makefile中的各种指令,从而自动化地对工程中的源文件进行各种操作。

 

        make和makefile搭配使用可以大大地减少我们的工作量,达成“自动化编译”,这时我们只需要一个指令便可以使整个工程完全自动编译。

        当我们大致地了解了make和makefile之后,我们接着对这两者进行详细的学习。

简单的运用

        当我们想要使用make和makefile,我们首先需要在当前目录下创建一个makefile,makefile的文件名可以为makefileMakefile或者GNUmakefile。这时固定的,因为在默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件。

        那么我们以经典的“Hello world!”来简单演示和讲解make和makefile的使用方法。当我们创建了一个makefile之后,我们还需要创建该程序所需要的源文件,我将它命名为main.c,并在其中编写相关的代码(输出"Hello world!")。

        准备过程完成如下:

【Linux】Linux下的项目自动化构建工具——make和makefile,【Linux】Linux操作系统,linux,centos

          现在我们进行对makefile文件的编写,编写makefile时,我们需要写入的内容主要有两个,分别称为依赖关系依赖方法

依赖关系:

        表示一个文件的生成是依附于另一个文件,语法为 【目标文件:被编译文件】 ,也就是表明目标文件依赖被编译文件。

依赖方法:

        代表依赖关系中的依赖文件该如何转化为目标文件,语法为 【tab 由依赖文件生成目标文件的手段】(这里必须使用tab作为前缀)。

        那么让我们看看Hello world对应的makefile的依赖关系和依赖方法该如何编写:

【Linux】Linux下的项目自动化构建工具——make和makefile,【Linux】Linux操作系统,linux,centos

         这样设定好依赖关系和依赖方法之后我们就可以使用make创建出名为 HW 的可执行文件。语法为【make 指令】。其中 :

  • makefile中可能会有多个目标文件,但是makefile会以第一个目标作为终极目标。
  • 使用make时的默认动作就是第一个目标对应的规则,也就是只输入make就会默认生成第一个目标。
  • make扫描makefile的顺序是从上到下。

【Linux】Linux下的项目自动化构建工具——make和makefile,【Linux】Linux操作系统,linux,centos

         除此之外,如果我们现在想要对编译过程中产生的临时文件进行清理或者清理旧版本的程序时,如果我们直接使用rm指令进行清除,这样的行为未免有些粗鲁和危险。于是makefile中也需要支持对文件的清理工作,也就是clean。同样按照依赖关系和依赖方法的形式进行编写:

【Linux】Linux下的项目自动化构建工具——make和makefile,【Linux】Linux操作系统,linux,centos

         那么我们现在可以尝试使用makefile中的规则对文件进行清理:

【Linux】Linux下的项目自动化构建工具——make和makefile,【Linux】Linux操作系统,linux,centos

                 上面就是make和makefile的一些简单运用,现在我们来看看makefile的工作原理:

  1. 目标的生成: a. 检查依赖关系中的依赖文件是否存在; b. 若依赖文件不存在,则寻找是否有某个规则用来生成该依赖文件。
  2. 目标的更新: a. 检查目标的所有依赖,任何一个依赖有更新时,就重新生成目标; b. 目标文件比依赖文件时间晚,则需要更新。

        在目标的更新中提到了文件时间的问题,这里简单的拓展一些关于文件时间的知识。我们都知道,文件=文件内容+文件时间。文件时间一般被分成三个时间,可以简单记为ACM三个时间:A(Access)、C(Change)、M(Modify)。Change代表最近改变文件内容的时间,Modify代表最近改变文件属性的时间,Access代表最近读文件的时间。

伪目标

        如果我们不想考虑文件时间,而想要无论什么情况都重新编译,这时就需要设置伪目标。伪目标表示这个目标总是被执行。一般来说产生可执行文件的逻辑是不会用伪目标修饰的,伪目标一般用于clean。

特殊符号

        makefile中有一些特殊符号,这里列举一些特殊符号。

        - :表示此命令即使执行出错,也依然继续执行后续命令。如:

        -rm a.o build/

        @:表示该命令只执行,不回显。一般规则执行时会在终端打印出正在执行的规则,而加上此符号后将只执行命令,不回显执行的规则。如:

        @gcc -o HW main.c

        $@和$^ 前者指的是依赖关系中的目标文件,后者指的是依赖关系中的依赖文件。如;

        HW:main.c

        gcc -o $@ $^

🍀结语

        以上就是make和makefile的基本入门知识啦,希望能对大家有所帮助。文章来源地址https://www.toymoban.com/news/detail-535272.html

到了这里,关于【Linux】Linux下的项目自动化构建工具——make和makefile的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Linux:项目自动化构建工具——make/Makefile

    前言: 本章主要内容有认识与学习 Linux 环境下如何使用项目自动化构建工具—— make/makefile 。 当我们编写一个较大的软件项目时,通常需要将多个源文件编译成可执行程序或库文件。为了简化这个过程,我们可以使用 make 工具和 Makefile 文件。 Makefile 文件可以帮助我们 自动

    2024年02月13日
    浏览(40)
  • 【Linux】Linux项目自动化构建工具-make/makefile

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

    2024年02月12日
    浏览(63)
  • 【Linux】项目自动化构建工具——make/Makefile及拓展

    1、背景知识 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作 makefile带来的好处就是——“自动化编译”,一旦

    2023年04月27日
    浏览(49)
  • Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile)

    在上一篇文章中介绍了Linux中的编辑器vim与编译器gcc与g++: 戳我看vim与gcc详解哦 在本篇文章中将继续来介绍Linux中的工具: 调试器gdb与项目自动化构建工具make/Makefile 在Windows环境中,我们使用vs时,常常会逐过程与逐语句地调试代码以更高效地寻找到错误的位置。在Linux中也

    2024年02月12日
    浏览(51)
  • Linux项目自动化构建工具-make/Makefile以及git三板斧

    是否会写make/makefile,从侧面反映了一个程序员是否具备完成大型工程的能力。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更

    2024年02月16日
    浏览(48)
  • 【Linux】Linux编译器-gcc/g++ && Linux项目自动化构建工具-make/Makefile

    目录 Linux编译器-gcc/g++使用 1.背景知识  Linux中头文件的目录在 Linux 库 条件编译的典型应用 2.gcc如何完成 动态库 vs 静态库 debug release Linux项目自动化构建工具-make/Makefile 背景 用法 特殊符号  预处理(去注释,头文件展开,条件编译,宏替换) 编译(生成汇编) 汇编(生成

    2024年02月20日
    浏览(49)
  • 【Linux】项目自动化构建工具-make和Makefile 的使用和进度条的实现

    什么是makefile 在我们以后的工作环境中,一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作 Linux中提供了自动化

    2024年02月07日
    浏览(68)
  • 【Linux】:Linux项目自动化构建工具——make/Makefile || Linux第一个小程序——进度条(简单版本)

    在本章开始给大家分享一个图片 希望对你有帮助 在这里插入图片描述 在开始本章之前 我们需要回顾一下上节课的函数的动静态库的优缺点 动态库的优点: 比较节省资源(这里说的资源不仅仅是磁盘资源 也包括网络资源 内存资源等等),不会出现太多的重复代码 缺点:对

    2024年02月05日
    浏览(43)
  • 【探索Linux】—— 强大的命令行工具 P.6(调试器-gdb、项目自动化构建工具-make/Makefile)

    前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C++的一些知识,也学习了一些Linux的基本操作,也了解并学习了有关Linux开发工具vim 、gcc/g++ 使用、yum工具以及git 命令行提交代码也相信大家都掌握的不错,今天博主带大家了解一下 —— Linux系统下的调试

    2024年02月12日
    浏览(38)
  • 【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用

    格式: gcc [选项] 要编译的文件 [选项] [目标文件] , gcc / g++ 安装: sudo yum install -y gcc-c++ 。安装后的编译器默认的版本是较低的,我们可以 使用选项 -std=c99 (即使用c99标准), -std=c++11 (即使用c++11的标准)来进行版本提升 。使用 -o 选项,可以将编译生成的可执行重命名

    2024年03月10日
    浏览(103)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包