当前位置: 首页 > 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.dtcms.com/a/272813.html

相关文章:

  • 数据结构 顺序表(1)
  • 等保-linux-三权分立账号设置,系统管理员、安全管理员、审计管理员
  • 目标检测中的评价指标计算
  • 数据结构 —— 键值对 map
  • Git操作技巧(一)
  • shell学习从入门到精通
  • 数据仓库:企业数据管理的核心枢纽
  • 创客匠人视角:从信任经济看创始人 IP 如何重塑 IP 变现逻辑
  • nmap扫描指定网段中指定开放端口的主机(IP,mac地址)
  • 量子计算系统软件:让“脆弱”的量子计算机真正可用
  • 有什么好使用的内网ip映射软件?可以让家庭/公司网络局域网端口,让公网互联网跨网访问
  • Spring boot整合dubbo+zookeeper
  • 26-计组-外存
  • 基于云端EC2的O3DE机器人仿真环境搭建指南
  • python自动化面试问题——关于python
  • 029_构造器重载与默认构造器
  • 【报错】Could not find a package configuration file provided by ‘glog’”
  • “Datawhale AI夏令营”基于带货视频评论的用户洞察挑战赛
  • 使用Tensorflow和CNN进行猫狗图片训练的实战总结
  • P1722 矩阵 II 题解 DFS深度优先遍历与卡特兰数(Catalan number)解
  • Spring Boot+Redis+Caffeine 二级缓存架构的终极实现方案、包含万级QPS下的黄金配置参数、全文超过2500字(博君一赞)
  • XGBoosting算法详解(Boosting思想的代表算法)
  • C语言<数据结构-链表>
  • LangChain RAG 实战
  • Transformers 和 PyTorch 的区别与安装指南
  • Docker 高级管理--Dockerfile镜像制作
  • Context Engineering Framework 系统详细介绍
  • 链表算法之【合并两个有序链表】
  • 牛客笔试题 除2!
  • 读取按键的四种方式