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

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

前言:
本章主要内容有认识与学习Linux环境下如何使用项目自动化构建工具——make/makefile

一.make与Makefile的关系

当我们编写一个较大的软件项目时,通常需要将多个源文件编译成可执行程序或库文件。为了简化这个过程,我们可以使用 make 工具和 Makefile 文件。Makefile 文件可以帮助我们自动化构建和管理软件项目,从而提高效率和可靠性。它还可以跨平台使用,因为 make 工具可以在各种不同的操作系统和编译器上运行。

1.Makefile

Makefile 文件包含了一系列规则,每个规则描述了如何从源文件生成目标文件。在每个规则中,我们定义了目标文件和其依赖关系,并且指定了需要执行的命令。

示例:

创建一个新文件 Makefile:

touch Makefile

编辑 Makefile 文件:

//vim进行编辑
vim Makefile
//写入内容
Test : Test.c
    gcc Test.c -o Test
//保存退出

这样就写好了一个Makefile文件 了,那么这样写有什么含义呢?

其实每个 Makefile 文件存在的意义就是生成一个最终目标文件,而 Makefile 文件里最开始的文件就被认定为是最终目标文件(示例中的Test文件)。

示例中,要想生成目标文件 Test ,我们需要通过 Test.c 文件经过编译后生成目标文件 Test。所以Test.cTest 产生了依赖关系,用表示。而接下来的 gcc Test.c -o Test这条指令就是解释目标文件 Test 需要和 test.c 产生怎样的关系。

当然依赖关系有时候也可以不存在。因为 make 的目的是产生目标文件,不用管通过什么手段,也不管有没有目标文件,例如:

//没有依赖关系的示例
Test : 
    touch Test

有的时候,一个依赖关系可能不足以生成最终目标文件,此时我们还需建立多层依赖关系,例如:

Test : test.o
   gcc test.o -o Test 
test.o : test.s
   gcc -c test.s -o test.o
test.s : test.i
   gcc -S test.i -o test.s
test.i : Test.c
   gcc -E Test.c -o test.i 

为了生成最终的目标文件Test,系统会根据依赖关系一层一层的寻找下去。如上例,要生成Test,就得找到 test.o,要生成 test.o 就要生成 test.s…,在这样一层一层的寻找的时候,如果有哪个过程中出现了断层(生成目标文件失败),则会出现报错。

上个示例结果如下,make 指令执行 Makefile 后,不仅最终目标文件生成了,过程中的目标文件也都会生成:

Linux:项目自动化构建工具——make/Makefile,Linux从入门到入坟,linux,c++
明白了Makefile是什么之后,再来看一看make指令。

2.make

make是一条指令,它与Makefile相伴相生。

当我们执行 make 指令时,make 工具会读取 Makefile 文件,并根据其中的规则来生成目标文件。它会检查每个规则中的依赖关系和目标文件的最新修改时间,从而决定哪些规则需要执行。

通俗讲就是,系统为了效率,并不会对已经生成的目标文件或未曾改动的目标文件再作复杂的编译并重新生成。

它会检查源文件与可执行文件最近修改时间的新旧,判断是否进行编译。

当我们只输入 make 指令时,它会默认最终目标文件。倘若我们只是想生成过程中的某一个目标文件,则需要指定该文件名。例如:只需生成 test.o 即可:

Test : test.o
   gcc test.o -o Test 
test.o : test.s
   gcc -c test.s -o test.o
test.s : test.i
   gcc -S test.i -o test.s
test.i : Test.c
   gcc -E Test.c -o test.i 
make test.o

Linux:项目自动化构建工具——make/Makefile,Linux从入门到入坟,linux,c++

二.项目清理

1.clean

Makefile 中,一般还会加入一个目标文件 clean 且用 .PHONY 修饰 ,其作用是清理生成项目文件。例如:

Test : test.o
    gcc test.o -o Test 
test.o : test.s
    gcc -c test.s -o test.o
test.s : test.i
    gcc -S test.i -o test.s
test.i : Test.c
    gcc -E Test.c -o test.i
        
.PHONY : clean 
clean : 
    rm -f Test test.i test.s test.o  

2. .PHONY

.PHONY 修饰的目标文件意为 总是被执行的。例如,我们执行 make test.o 命令后,可以执行,但是第二次却不行了,因为该目标文件已经存在且为最新。但是被.PHONY饰后可以一直被执行。

Linux:项目自动化构建工具——make/Makefile,Linux从入门到入坟,linux,c++


本文到此结束,码文不易,还请多多支持哦!文章来源地址https://www.toymoban.com/news/detail-533942.html

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

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

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

相关文章

  • 【Linux】Linux项目自动化构建工具-make/makefile

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

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

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

    2023年04月27日
    浏览(37)
  • 【Linux】Linux下的项目自动化构建工具——make和makefile

            大家好,好久不见!今天小狮子为大家带来的文章是一篇关于Linux下的项目自动化构建工具——make和makefile的博客,希望能帮助到大家。         当我们进行涉及多文件的工程开发时,我们需要对很多不同类型、不同功能,存在于不同目录下的源文件进行编译操作,

    2024年02月13日
    浏览(33)
  • Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile)

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

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

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

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

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

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

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

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

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

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

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

    2024年02月12日
    浏览(24)
  • 【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日
    浏览(85)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包