Linux项目自动化构建工具:make与Makefile的基本用法

12 篇文章 3 订阅
订阅专栏

目录

1.什么是makefile

2.快速简单了解make/Makefile的使用

3.背后的知识:

4.依赖关系

5.其他写法


1.什么是makefile

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

2.快速简单了解make/Makefile的使用

第一步,编写一个 .c 源文件。 

第二步,创建一个名称为Makefile文件,文件名首字符也可以小写,但必须是makefile。

第三步,使用vim打开Makefile文件,编写下面代码,保存并退出。这里源文件是code.c,mybin是最终生成可执行程序的名称,可以自己编写。

第四步,输入make 指令,可以发现已经生成了可执行程序mybin

第五步,输入make clean,可以发现可执行程序被删除。

3.背后的知识:

现实中,依赖关系+依赖方法可以描述清楚一件事情的原因和做法,能答到我们的目的,这里有依赖关系和依赖方法。依赖关系就是mybin可执行程序要依赖code.c源文件。依赖方法就是相关的指令。clean这里只有依赖关系没有依赖方法。

关于.PHONY:

phony有假的意思,在这里作伪目标,表示总是被执行。什么叫总是被执行呢。我们这里可以比较一下make,与make clean。这里之所以可以只写make而不用写成make mybin,是因为mybin写在了最前面,所以可以省略,如果clean写在了前面make clean也可以简写成make,但这时make mybin就不能简写了。

可以发现当我们删除可执行程序mybin后,我们第一次make生成可执行程序时是可以的,但只能生成一次,之后便提示mybin是最近新的。但是make clean删除文件后还可以删除,这就是.PHONY的作用。

原理:

可以发现makefile和make总是不让我们重新编译我们的代码。它们通过时间对比,可以做到不让有些代码进行重新编译(不让某些操作进行),可以提高编译的效率。对比的时间是源文件的被修改的时间与可执行程序生成的时间。可以通过stat 指令查看文件的属性:

 这里有三个时间,Access访问时间,Modify修改时间,Change属性改变时间,这里比较的时间是Modify时间。当源文件的Modify时间大于可以执行程序mybin的Modify时间时,执行make指令才会重新编译生成新的可执行文件,否则会提醒可执行文件已经更新。

关于Access时间:
一般而言,一个文件被查看的频率是非常高的,我们所看到的文件,都在存放在磁盘中的,磁盘文件=内容+属性,更改时间的本质,其实是访问磁盘!

而Linux系统充满大量的访问磁盘的IO操作,每次访问都要更改accesstime,变相的减慢系统效率。所以更改Access时间是,添加了次数限制,所以不会在使用vim或cat访问后Access时间一定会被更改。

如果我们想要更新一下文件的时间,想让源文件变成最新的(没有改内容),可以使用touch命令,touch不仅可以创建文件还可以更新文件时间,可以通过man touch指令查看具体解释。

总结:

make是如何工作的,在默认的方式下,也就是我们只输入make命令。

  • 1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
  • 2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“mybin”这个文件,并把这个文件作为最终的目标文件。
  • 3. 如果mybin文件不存在,或是mybin所依赖的后面的code.c文件的文件修改时间要比mybin这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成mybin这个文件。

4.依赖关系

执行make指令后, 生成了4个文件。这是因为如果mybin所依赖的code.o文件不存在,那么make会在当前文件中找目标为code.o文件的依赖性,如果找到则再根据那一个规则生成code.o文件。(这有点像一个堆栈的过程)。

  • 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件
  • 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make不会做出反应。
  • make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么make就会出现错误。

 但是如果你只是想生成可执行程序,还是推荐文章开头的写法。

5.其他写法

 可以发现上面方法都会打印指令,可以在指令前加@就可以隐藏指令,使用echo指令打印相关信息。

make: 

make clean:

Makefile中使用 # 使用注释

echo不加@对比:

 

 makefile中可以定义变量,可以发生替换,但是要加上$()。之后更改源文件,可执行文件时就会方便很多,或者可以把编译器由gcc改成g++。

  $^表示所依赖的文件,$@表示目标文件,可依赖的文件可以有多个,可以与上面的定义变量混合使用更加方便。

本篇结束!

LinuxLinux项目自动化构建工具 —— make/makefile
StackFrame
01-10 3410
make/makefile 概念、原理与规则、简易自动化工具构建
Linux项目自动化构建工具make/Makefile使用
ermu的博客
11-26 5257
Linux项目自动化构建工具makemakefile基本使用
linux系统make命令详解
顺其自然~专栏
03-01 1万+
无论是在Linux 还是在Unix环境 中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到makemake install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用makemakefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员 来说简直就是一场灾难。
Linuxmakemakefile详解
无敌岩雀的博客
02-01 1945
当谈论到 Linux 中的软件构建工具时,不得不提到 MakefileMakefile是一种文件,它包含了一组规则,用于指导构建系统在源代码中生成可执行文件或库。它是使用GNU Make软件的标准格式。Makefile 的主要目的是描述代码文件之间的依赖关系以及如何构建以达到特定目标。通过定义规则和命令开发人员可以轻松地管理项目的复杂构建过程。Makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个 make 命令,整个工程 完全自动编译,极大的提高了软件开发的效率。
Linuxmake/Makefile --- 自动化构建项目工具
muyuteacher的博客
12-09 1190
本篇主要介绍了make/Makefile的简单使用和语法规则,进而介绍了其实现的原理。介绍了make/makefile如何识别文件新旧、.PHONY修饰的伪目标的含义和用法make/makefile的推导能力,最后介绍了一些Makefile的语法技巧和使用注意事项
linux 自带的make 命令,详解Linuxmake命令使用
weixin_42526353的博客
04-28 6773
代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。Make是最常用的构建工具,诞生于1977年,主要用于C语言项目。但是实际上 ,任何只要某个文件有变化,就要重新构建项目,都可以用Make构建。一、Make的概念Make这个词,英语的意思是"制作"。Make命令直接用了这个意思,就是要做出某个文件。比如,要做出文件a.txt,就...
Make 命令教程
闲云孤鹤
02-20 1831
转载至:http://www.ruanyifeng.com/blog/2015/02/make.html 作者: 阮一峰 日期: 2015年2月20日 代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。 Make是最常用的构建工具,诞生于1977年,主要用于C语言项目。但是实际上 ,任何只要
初识linux之gcc/g++编译器与linux项目自动化构建工具make/makefile
Masquerena114514的博客
11-08 858
讲解了linux中的gcc/g++编译器与linux项目自动化构建工具make/makefile)的基本操作和使用
Linux自动化构建工具make/Makefile
gangaue的博客
10-31 831
本篇文章进行自动化构建项目make的学习!!!
Linux 自动化构建工具 make/Makefile
m0_60028455的博客
06-20 451
镜像下载、域名解析、时间同步请点击 阿里云开源镜像站 VS中有一键编译+自动运行,Linux也给我们提供了对应的编译方式,虽然不及VS那么便捷,但是相比于手动输入 gcc -o add add.c ,我们一句make就可以搞定 Makefile是一个文件,能够存放上述 gcc -o add add.c 这种编译指令 make是一个命令工具,能够解释Makefile中的指令 要如何编译.c文件,关键就在于Makefile是怎么写的,下面我们主要介绍这两者的使用 一、 单个文件的编译 假设我们要编译这么一个
linuxmake以及makefile(一)
热门推荐
C/C++攻城狮
06-19 3万+
0x00 前言 文章中的文字可能存在语法错误以及标点错误,请谅解; 如果在文章中发现代码错误或其它问题请告知,感谢! 0x01make工具简介 make工具是一个根据makefile文件内容,针对目标(可执行文件)进行依赖性检测(要生成该可执行文件之前要有哪些中间文件)并执行相关动作(编译等)的工具 。而这个makefile文件类似一个脚本,其中内容包含make所要进行的处理动作以及依赖关系。 另...
Linux使用make命令编译c源文件
骑着代码去流浪
05-15 9685
make命令是GNU的工程化编译工具,用于编译众多相互关联的源代码问价,以实现工程化的管理,提高开发效率。make命令唯一读取的文件是Makefile,在较大的项目中,有些文件没有编译有些编译过,Makefile中指定一定的规则来对整个项目的所有文件新型编译,make命令读取文件,按照规则编译未编译的文件。因此使用make命令可以避免使用gcc命令进行繁琐的执行编译。以三个文件为例:max.c:i...
例解 LinuxMake 命令
weixin_30656145的博客
01-17 3340
Linuxmake命令是系统管理员和程序员用的最频繁的命令之一。管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题。本文我们将用一些实例来讨论 make 命令背后的工作机制。 Make 如何工作的 对于不知道背后机理的人来说,make 命令命令行参数一样接收目标。这些目标通常存放在以 “Makefile” 来命名的特殊文件中,同时文件也包含...
Linux关于makefile使用(一)
Gaodes的博客
08-24 2万+
makefile的作用:人们通常利用 make 工具来自动完成编译工作。这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译。 让我们来使用一下makefile: 首先我们要建一个目录来进行放makefile文档,和我们需要编译的文件 这是我们建立的目录:make...
linuxmake命令
捕影世界
06-11 3540
make是用来编译的,它从Makefile中读取指令,然后编译。 make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。 make 的作用是开始进行源代码编译,以及一些功能的提供,这些功能由他的 Makefile 设置文件提供相关的功能。 比如 make install 一般表示进行安装,make uninstall 是卸载,不加参数就是默认的进行源代码编...
[Linux] Linux操作系统 进程的状态
最新发布
水墨不写bug
09-21 664
[Linux] Linux操作系统 进程的状态,理解进程的不同状态的含义
linux第三课(linux中安装nginx与redis及SpringBoot集成redis)
2301_77721901的博客
09-19 699
Nginx是一款是由俄罗斯的程序设计师所开发高性能的Web服务器只能运行前端项目不能运行 java项目。redis是一款开源的键值对存储的数据结构存储系统,它将数据存储到内存中,也可以将数据从内存存储到硬盘上,再次启动时可以加载,保持数据的持久性,它部署在我们例如mysql数据库的前面,短时间大量数据(或者长期不变的数据)的访问都进入到redis中,减轻了我们自己数据库的负担,保护了我们的数据库.
Linux】uImage头部信息详细解析
W__winter的博客
09-16 1589
【代码】【Linux】uImage头部信息详细解析。
Linux自动化构建使用automake生成Makefile全攻略
Linux系统中,Makefile自动化构建过程的关键,它定义了项目中各个文件之间的依赖关系,使得编译器能够智能地决定何时需要重新编译哪些文件。然而,手动编写一个符合自由软件惯例(如GNU标准)的Makefile是一项...
写文章

热门文章

  • Visual Studio 2022 中如何设置背景图片,壁纸 8815
  • Windows使用VNC Viewer远程桌面Ubuntu【内网穿透】 6075
  • 开源轻量级分布式文件系统FastDFS本地部署并实现远程访问服务器 5673
  • Linux 入门:基本指令 5351
  • 使用DockerUI结合内网穿透工具轻松实现公网访问和管理docker容器 5249

分类专栏

  • 高阶数据结构 3篇
  • cpolar 16篇
  • Linux 12篇
  • C++ 19篇
  • C生万物 22篇
  • 数据结构与算法 10篇

最新评论

  • 开源轻量级分布式文件系统FastDFS本地部署并实现远程访问服务器

    追风少年+1: 这篇文章真是干货满满,作者对技术细节的把握和解析非常到位,让我对这个主题有了更深入的理解。期待作者能分享更多这样的高质量内容!

  • 解决无公网IP的微信公众号开发调试问题,利用内网穿透的实践经验分享

    Baron keller: 好文,有很多细节,赞!!

  • 开源轻量级分布式文件系统FastDFS本地部署并实现远程访问服务器

    h_bei: 文章写的很详细,条理清晰,很容易看进去,学到了很多知识,感谢博主分享,支持博主

  • 【高阶数据结构】红黑树

    小余要努力: 博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,期待博主持续带来更多好文,同时也希望可以来我博客指导我一番!

  • 【高阶数据结构】红黑树

    行十万里人生: 希望博主也来我的博客指导一番

最新文章

  • 【高阶数据结构】红黑树
  • 使用Docker部署Apache Superset结合内网穿透实现远程访问本地服务
  • AVL树 -- C++实现
2024年6篇
2023年78篇

目录

目录

评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一棵西兰花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家武义玻璃钢雕塑定做玻璃钢红军雕塑批发价格商场艺术空间美陈海洋玻璃钢雕塑厂大同玻璃钢雕塑定制曲阳玻璃钢动物雕塑定做呼市商场美陈致电玻璃钢热气球雕塑价格十堰玻璃钢考拉雕塑报价揭阳玻璃钢长颈鹿雕塑商场中秋国庆主题活动美陈森系商场美陈创意无锡商场美陈布置优质的玻璃钢仿铜雕塑九江玻璃钢雕塑定制湖北仿铜玻璃钢雕塑玻璃钢校园雕塑设计公司上海升美玻璃钢雕塑溧水商场美陈策划发光玻璃钢雕塑制作贵州玻璃钢人物雕塑生产厂玻璃钢马雕塑厂高淳商场美陈制作湖南人物玻璃钢雕塑安装玻璃钢变形金刚雕塑深圳佛像玻璃钢雕塑定制四川玻璃钢仿真水果雕塑价格池州个性化玻璃钢雕塑制作临江玻璃钢头像雕塑玻璃钢卡通雕塑讯息香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化