Linux基础开发工具之Linux自动项目构建工具的使用

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

目录

前言

1.make/makefile

1.1 依赖关系/依赖方法

2.原理

3.项目清理

 4.make的执行问题

 5.相关简单的符号介绍

总结


前言

  之前给大家介绍了我们在开发过程中所需要使用到的编辑器vim,以及编译器gcc/g++的使用,但是我相信大家在使用过程会发现我们在每次编写好一份代码时总是需要每次去调用gcc/g++的相关指令去编译,那么如果我们具有了多份代码时,我们还需要一个一个去编写就显得非常的麻烦,那么我们今天要学的相关工具就会免去我们在这个方面的很多工作。


1.make/makefile

    学习我们的自动项目构建工具学习的就是我们对make以及makefile这个工具的使用,而会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。
   一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
    make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
 从本质来讲我们的make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

那么我们如何去使用我们这个工具呢?那么首先就需要我们自己去创建一个makefile文件。

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器

 那么创建好这个文件后,我们后续需要做什么操作呢?为了让大家更好的理解小编下面先给大家介绍两个概念。

1.1 依赖关系/依赖方法

 这里我们如何去理解这个依赖关系和依赖方法呢?这里我就简单的给大家举一个例子:

首先我们先创建一个文件写一份代码:

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器

 这里我们对makefile进行配置:

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器

 这里我们可以看到我们对我们hello.c到hello运行程序进行了编写,那么这里我们的依赖关系就是:

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器

 那么我们的依赖方法对应的就是每行依赖关系对应得下一行:

也就是: gcc  -option hello.* -option hello.*

                rm - fr hello.i hello.s hello.o hello

那么我们编写好得makefile文件该如何使用呢?这里我们使用make指令看看效果:

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器

 这里我们使用make指令可以发现我们这里产生了我们编译的各个过程所对应的文件,那么这里我们调用我们的可执行程序看看运行结果如何:

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器

 这里我们可以发现我们的程序执行无误,那么我们此处的原理又是什么呢?

2.原理

1.首先make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“hello”这个文件,并把这个文件作为最终的目标文件

3. 如果hello文件不存在,或是hello所依赖的后面的hello.o文件的文件修改时间要比hello这个文件新,那么,他就会执行后面所定义的命令来生成hello这个文件。

 4.如果hello所依赖的hello.o文件不存在那么make会在当前文件中找目标为hello.o文件的依赖性,如果找到则再根据那一个规则生成hello.o文件。(这有点像一个堆栈的过程)
5. 当然,你的C文件和H文件是存在的啦,于是make会生成 hello.o 文件,然后再用 hello.o 文件声明make的终极任务,也就是执行文件hello了。
6. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。
8. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。

那么总结的来说就是我们在调用make指令该会自动推导makefile中的依赖关系,去产生我们的目标文件。

3.项目清理

这里我们产生了一堆文件,但是我们的工作也是需要被清理的,这个清理过程就需要我们调用我们先前就编写好的clean

也就是

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器

这里我们发现我们的清除程序调用方式是make +clean ,那么这里的原因是什么呢?这里有个小知识需要我们去了解一下:

make从顶向下扫描,默认将第一个作为make指令,后续的就需要我们使用make+文件名,就如我们需要使用make  clean达到清理效果

但是一般我们的clean目标文件我们一般将其设置为伪目标,也就需要使用.PHONY关键字去修饰。

这里我们为什么需要使用.PHONY关键字去修饰clean呢?首先我们需要知道的就是我们的.PHONY关键字的作用就是让我们无论在什么情况下都能被执行,那么也就是说我们的依赖关系并不是在什么情况下都能执行的,而是需要一定条件的,所以我们不建议把形成可执行逻辑用伪目标修饰,但是就是我们的清理程序是我们要求每次都要被执行的,所以我们一般用伪目标关键字去修饰clean。

所以我们简单的修改一下我们的makefile文件:

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器

 4.make的执行问题

我们之前说我们的make并不是在任何情况下都能执行的,这里我给大家实验一下:

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器

 这里我们在第一次执行过make后发现我们第二次并不能执行了,而且上面提示我们hello是更新了的,那么原因是什么呢?首先我们需要知道我们make在执行所对应的依赖关系是需要我们操作系统付出代价的,在我们源文件没有改变的情况下,我们再次编译得到可执行程序也是不变的,那么我们再次make得到的可执行程序是没有意义的,我们的操作系统也不允许这样的事情发生。

那么如果要在是make有效就需要我们修改我们的源文件内容,而这个过程实际上就是修改了我们源文件的相关时间,从而我们的源文件时间就比我们的可执行程序文件更新,这样子我们就可以产生新的可执行程序,所以我们可以说我们的make指令是否有效实际上就是我们的源文件时间是否比我们的可执行程序文件更新。

而我们的文件又分为三个时间,分别是:

access指的是我们的访问时间

modify指的是我们对文件内容进行修改的时间

change指的是我们对文件属性进行修改的时间

我们可以使用stat指令去查看相关时间信息:

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器

  这里需要给大家简单的说明一下这里我们由于访问我们文件的是非常频繁的所以修改access时间会影响我们的整机效率,所以在我们现在的操作系统中access的修改并不是每次都需要修改而是要达到一定的条件(每个操作系统的不一样)。

那么我们对我们的源文件进行修改实际上就会更改我们的Modify时间,但是在修改源文件的过程中一般我们文件属性相关的内存也会发生相关变化所以我们的Change的时间也会发生变化。

那么我们就简单的给大家演示一下,这里我们对我们的源文件内容进行修改:

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器

 这里我们发现我们的时间发生了改变,那么我们调用我们的make指令看看效果:

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器

可以发现我们的make成功了。

此外为了验证我们的程序编译成功和我们内容变化没有关系我们可以使用我们的touch指令去修改相关时间:

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器 这里我们看到我们的时间发生了变化,那么调用我们的make指令看看效果:

Linux基础开发工具之Linux自动项目构建工具的使用,linux,运维,服务器

 可以发现我们的make指令也成功了,此外我们可以使用touch+对应的选项去修改我们的对应的时间,也就是:

-a更新访问时间,-m更新修改内容时间(这里我们的change时间也会随着改变)

 5.相关简单的符号介绍

 总体来讲我们的make小编已经给大家讲解的大差不差了,但是这里还有几个符号需要大家去使用理解一下:

$@:表示的是我们依赖关系左边的简写

 $^:表示的是我们依赖关系右边的简写

 @:如果我们不想让我们使用make时我们的依赖方法显示到屏幕上,只需要我们在我们的依赖方法的第一行加上@即可

 #:mikefile中的注释


总结

 对于内容呢,小编就给大家介绍到这里了关键是需要大家平时多使用加深影响并且学习,才能掌握我们的Linux操作系统的相关内容。
 文章来源地址https://www.toymoban.com/news/detail-635592.html


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

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

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

相关文章

  • 【Linux】基础开发工具——vim篇

    前言:  今天给大家分享的工具是 vim 。vim是一款强大的 文本编辑器 ,他有多种编辑模式,所以也叫 多模式编辑器 ,它的前身是vi。vim兼容vi的所有指令,并且在vi的基础上添加了一些新的特性。例如:语法加亮、可视化操作也可以运行在x windows、mac os、windows。  先给大家

    2024年02月12日
    浏览(37)
  • linux中基础开发工具的使用

    1.linux中的软件包管理器 1.1什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很

    2024年02月02日
    浏览(63)
  • 【Linux】基础开发工具使用 --- gcc

    目录 预处理 编译 汇编 链接 函数库 协助记忆 🧋GCC(GNU Compiler Collection)是由GNU开发的编程语言编译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。),说那么多就是一个编译器。平时写完的程序就是需

    2024年02月03日
    浏览(46)
  • Linux环境基础开发工具使用(二)

    📘北尘_ :个人主页 🌎个人专栏 :《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个

    2024年02月05日
    浏览(66)
  • 【1++的Linux】之基础开发工具

    👍作者主页:进击的1++ 🤩 专栏链接:【1++的Linux】 Linux软件包管理器相当于我们的应用商店一样,yum是Linux下一种常用的软件包管理器。 在介绍yum前我们再来认识一个工具rzsz,这个工具是用于windows与Linux机器间通过Xshell传输文件的,可通过拖拽的方式将文件上传至另一个机

    2024年02月13日
    浏览(36)
  • 【Linux】基础开发工具——yum篇

     在Windows环境下,我们通常会到对应的官网,去下载安装包进行软件的安装,在手机端,我们通常会到应用商店去下载我们需要的软件。那在Linux环境下如何安装软件呢?  源代码安装,即软件的开发者把软件的源代码直接给我们,我们自己对源代码进行编译、安装。源代码

    2024年02月12日
    浏览(46)
  • 【区块链技术开发】 Solidity使用Truffle Box工具实现预构建模板、自动化部署、创建智能合约示例代码

    专栏:区块链技术开发 Truffle Box是一个开发工具,为Truffle生态系统中的开发人员提供了预构建

    2023年04月16日
    浏览(70)
  • 【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用3(GDB调试器的基础使用)

    作者:爱写代码的刚子 时间:2023.7.18 前言:本篇博客主要讲解Linux中调试器的使用,为之后的Linux编程打下坚固的基础。 背景 程序的发布方式有两种,debug模式(能被调试 )和release模式 Linux gcc/g++出来的二进制程序, 默认是release模式 要使用gdb调试,必须在源代码生成二进制程

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

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

    2024年02月14日
    浏览(35)
  • 【Linux】基础开发工具——gcc/g++篇

    前言 :  在前面的文章里给大家介绍了 vim 的使用方法,学会了vim之后就可以进行代码的编写工作,但vim仅仅只是一款文本编辑器,要想让我们的代码运行起来,还需要使用今天给大家介绍的 编译工具:gcc/g++ 。其中gcc是针对C语言的编译器,g++是针对C++的编译器,他俩在使

    2024年02月15日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包