当前位置: 首页 > news >正文

Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件

目录

一、make 工具和 makefile 文件

1.使用 make 工具

2.makefile文件


一、make 工具和 makefile 文件

前言:

        前面我们在编写 linux 上第一个程序 hello world 的时候是直接使用 gcc 命令的。我们编译一个程序是非常的简单的,直接输入 gcc 然后跟上程序的名称再跟上指定生成程序的名称,就可以很轻松的编译出 hello这个可执行文件了。但是如果我们以后工作的时候要编译一个工程,这个工程里面有很多的源文件,这时候我们全部使用这个命令来编译那就非常的麻烦了,而且如果我们修改了一个源文件,那么我们使用命令来编译就要再次执行一遍这个过程,就会非常的耗时间。
        如果有小伙伴以前学习过单片机,大家可以类比下单片机开发软件 keil 里面的单独编译和全部编译。单独编译是很省时间的,全部编译就会非常的耗时间,我们使用命令来编译就相当于我们单片机软件中的全部编译。为了解决编译一个工程非常繁琐这个问题,前人就给我们发明了编译辅助工具 make 工具,它的编译思路是非常简单的,它会在编译之前先比较哪个文件的时间发生了改变,如果说这个文件它修改的时间要晚于编译生成的文件,那么它就会按照要求重新构建这些文件,而不是说再浪费时间重新构建其他的文件了。假如在单片机上用 keil 写了一个 c 文件,这个工程里边别的文件没有改,那么我们就不用点全部编译,只要编译一下我们修改过的文件就可以了。make 也是这样的,只不过它比较聪明,它不用再人为
的去判断了,在编译之前会自动帮我们判断。

1.使用 make 工具

        make 工具是编译辅助工具,用来解决使用命令编译工程非常繁琐的问题。
        调用这个命令工具:我们在 windows 上编程使用 ide ,我们有图形界面,有相应的按钮,比如说 build或者 run 来编译。其实 make 这个编译辅助工具使用也是非常简单的,我们在控制台上直接输入 make 命令,它就会自动调用 make 工具。
        我们来直接在这个目录下输入 make ,然后报错了,因为我没有告诉 make 这个工具它按照什么规则来编译我们的程序。如下图所示。

2.makefile文件

        Makefile 就是描述了整个工程编译连接等规则的文件。我们在终端输入完 make 命令之后,调用 make工具,make 就会在当前目录按照文件名就会找 makefile 文件,Makefile 的命名必须是 makefile 或 Makefile ,m 大写小写都是可以的。
       我们刚才输入命令报错的原因是因为在当前目录下是没有 makefile 这个文件的,作者这里新建一个Makefile 文件,然后在当前目录下输入 make 命令,我输入完 make 命令,它就会调用 make 工具,make工具就会在当前目录下找到 makefile 这个文件,这里又报错了,因为作者这里创建的 makefile 文件,他虽然找到了但是里面是空的,因为没有包含任何的规则。如下图所示。
        接下来先给大家写一个简单的来试一下,打开 makefile 文件,敲的时候一定要按 Tab 首行缩进,不能用空格,然后我们输入内容,保存退出,如下图所示。
        然后输入 make ,在当前这个目录下,成功的生成 hello 这个可执行文件,执行一下,可以看到成功输出了,到这里我们的编译流程就已经讲完了,我们也成功的利用 makefile 文件和 make 工具,把 hello.c 编译成了 hello 可执行文件。如下图所示。
        我们弄清楚了什么是 make 工具,怎么来调用 make 工具,makefile 又是什么,弄清楚了他们的关系后,后面我们再学习 makefile 语法和裸机编写 makefile 时,就非常的容易了。
http://www.lryc.cn/news/584356.html

相关文章:

  • fastMCP基础(一)
  • 如何将多个.sql文件合并成一个:Windows和Linux/Mac详细指南
  • STM32F103C8T6驱动无源蜂鸣器详解:从硬件设计到音乐播放
  • 【研报复现】方正金工:(1)适度冒险 因子
  • Boost.Asio学习(3):异步读写
  • Pytest之收集用例规则与运行指定用例
  • 读取按键的四种方式
  • Thrust库介绍与使用
  • AI进校园:北京中小学9月起开设AI通识课,每学年不少于8课时
  • 【PTA数据结构 | C语言版】链式栈的3个操作
  • AI 对话实现打字机效果 Vue3 setup
  • SEO算法更新应对:5大实战案例与优化策略
  • 力扣刷题记录(c++)06
  • The 2023 ICPC Asia Hangzhou Regional Contest(G. Snake Move(最短路))
  • Map容器用map优化程序
  • 《一起出发,“春”不“晚”》特别行动踏梦武当,探寻新春奇境
  • 动态规划疑惑总结
  • 爬虫-正则使用
  • 8.2.3希尔排序
  • 【Bluedroid】蓝牙协议栈控制器能力解析与核心功能配置机制(decode_controller_support)
  • 【Nginx】Nginx 安装与 Sticky 模块配置
  • Android 13----在framworks层映射一个物理按键
  • FlashAttention 快速安装指南(避免长时间编译)
  • GoView 低代码数据可视化
  • JAVA JVM对象的实现
  • 机器学习与光子学的融合正重塑光学器件设计范式
  • 统计文件内容:统计一个文本文件中字符、单词、行数。
  • C#中异步任务取消:CancellationToken
  • HOOK专题
  • Linux流量分析:tcpdump wireshark