> 技术文档 > 快来用 make 与 Makefile 实现新年倒计时(Linux 篇)_linux倒计时命令

快来用 make 与 Makefile 实现新年倒计时(Linux 篇)_linux倒计时命令


 🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 

🚩用通俗易懂且不失专业性的文字,讲解计算机领域那些看似枯燥的知识点🚩  


目录

前言 

一、make 与 Makefile 的重要性🌟

二、make 与 Makefile 的基础概念📖

三、依赖关系剖析🔍

3.1  依赖关系的构建原理🎯

3.2 依赖关系中的错误处理🚫

四、项目清理机制🧹

五、关于make与makefile的一些问题😕

5.1 make指令为什么不能多次执行呢?

5.2 那么make怎么知道要不要再次编译呢?

六、Linux第一个小程序-倒计时🔥

6.1 回车换行

6.2 缓冲区

6.3 实现过程 

总结🎉


前言 

在 Linux 软件开发的广阔天地里,项目的自动化构建可是重中之重✨。make 工具携手 Makefile 文件,宛如一对得力助手,为开发者们提供了高效且灵活的项目管理与编译方式。

接下来,就让我们一同深入探索 make 和 Makefile 的奇妙世界吧🧐。


一、make 与 Makefile 的重要性🌟

会不会写 Makefile,从侧面反映了一个人应对大型工程的能力呢🤔。大型项目中,源文件数量繁多,还按类型、功能、模块分布在各个目录。而 Makefile 就像一位智慧的指挥官,通过定义一系列规则,精准安排文件的编译顺序、重新编译时机以及各种复杂操作,实现了超便捷的 “自动化编译”。只需轻松下达一个make命令,整个工程就能自动编译,大大提升了开发效率,简直不要太赞👍!


二、make 与 Makefile 的基础概念📖

make是个命令工具,专门负责解读 Makefile 里的指令。不同的 IDE,像 Delphi、Visual C++,还有 Linux 下的 GNU,都有类似的功能,这让 Makefile 成为工程编译的常用方法。简单来说,make是负责执行的命令,Makefile 则是记录编译规则和指令的文件,二者紧密配合,完成项目的自动化构建🤝。

我们先看看make与makefile的相关操作👇:

 


 以下写法也可以👇: 


三、依赖关系剖析🔍

以一个简单的 C 语言项目为例,看看下面这个 Makefile 片段:

在这里,mycode依赖mycode.omycode.o依赖mycode.smycode.s依赖mycode.imycode.i又依赖mycode.c这种依赖关系构成了一个清晰的层次结构,make工具就依据这个来确定编译顺序🧐。

3.1  依赖关系的构建原理🎯

make开始工作时,会先在当前目录找 “Makefile” 或 “makefile” 文件。找到后,它会把文件里的第一个目标文件,比如上面例子中的 “mycode”,当作最终目标(make的默认操作)。要是目标文件不存在,或者它依赖的文件比它新,make就会执行相应命令来生成目标文件。比如mycode不存在,且mycode.omycode新,make就会执行gcc mycode.o -o mycode生成mycode。要是mycode.o也不存在,make会接着找mycode.o的依赖关系并按规则生成,就像剥洋葱一样,一层一层,直到编译出第一个目标文件😃。

3.2 依赖关系中的错误处理🚫

在寻找依赖关系的过程中,如果出了问题,比如找不到被依赖的文件,make会直接罢工并报错。但对于命令本身的错误或者编译失败,make通常不会管,它只专注于文件的依赖关系。要是依赖的文件找不到,make就不干啦😒。


四、项目清理机制🧹

项目开发过程中,清理旧的目标文件和中间文件很有必要,这样才能重新编译。看下面这个例子:

这里的clean目标没有和第一个目标文件直接或间接关联,它定义的命令不会自动执行。不过,我们可以手动执行make clean,来清除所有相关目标文件,为重新编译做准备。一般我们把clean设为伪目标,用.PHONY修饰。伪目标的特点是,不管它依赖的文件啥情况,都会被执行,保证清理操作稳稳当当✅。


五、关于make与makefile的一些问题😕

5.1 make指令为什么不能多次执行呢?

原因是要提高编译效率

5.2 那么make怎么知道要不要再次编译呢?

make怎么判断源文件的新旧?

  • ⭐只需要比较,可执行程序的最近修改时间 和 源文件的最近修改时间
  • 如果可执行程序(.exe)新于 源文件(.c)那么源文件是老的,不需要重新编译
  • 反之,则需要重新编译

查看时间的指令 : stat 

  • Access:表示访问的时间
  • Modify:表示文件内容修改的时间
  • Change:表示文件属性修改的时间

我们可以用 touch 命令更新时间 

 因此,make命令并不是总是执行的,要根据可执行程序 与 源文件的新旧

如果想总是执行make命令,那么就要在makefile文件中 用.PHONY修饰。


六、Linux第一个小程序-倒计时🔥

 学到目前为止,让我们实现一个程序吧~

我们先来谈谈下面俩点

6.1 回车换行

 回车是让光标到最左边,换行是进入下一行

6.2 缓冲区

我们发现等了2秒后,才打印结果

 

 因此,缓冲区就是由C语言维护的一段内存

 强制刷新

6.3 实现过程 

  1. 先创建以下文件
  2. 在文件中写入基本信息
  3. 创建makefile,写入信息
  4. 实现代码

总结🎉

make 和 Makefile 为 Linux 项目的自动化构建提供了强大支持。通过合理设定依赖关系和规则,开发者能高效管理项目编译过程,提升开发效率。项目清理机制又能保持开发环境整洁,方便新的编译和调试。深入理解 make 和 Makefile 的原理,对开发大型复杂的 Linux 项目至关重要,是 Linux 开发者的必备技能💪。掌握这些工具,让我们在软件开发的路上更加游刃有余,轻松应对各种挑战吧!


 如果在学习过程中有任何疑问或建议,欢迎随时交流分享哦😉! 👉【A Charmer】