【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十九章 Linux 工具之make 工具和 makefile 文件

news2024/9/17 9:16:38

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT、4G模块、CAN、RS485等接口一应俱全。H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。系统支持Android9.0(支持获取root限)Linux4.14.78+Qt5.10.1、Yocto、Ubuntu20、Debian9系统。适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、

【公众号】迅为电子

【粉丝群】258811263(加群获取驱动文档+例程)


第十九章 Linux 工具之make 工具和 makefile 文件

本章内容对应视频讲解链接(在线观看):

Linux 工具之make 工具和 makefile 文件  https://www.bilibili.com/video/BV1M7411m7wT?p=19

前面我们在编写linux上第一个程序hello world 的时候是直接使用 gcc 命令的。我们编译一个程序是非常的简单的,直接输入gcc 然后跟上程序的名称再跟上指定生成程序的名称,就可以很轻松的编译出hello这个可执行文件了。但是如果我们以后工作的时候要编译一个工程,这个工程里面有很多的源文件,这时候我们全部使用这个命令来编译那就非常的麻烦了,而且如果我们修改了一个源文件,那么我们使用命令来编译就要再次执行一遍这个过程,就会非常的耗时间。

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

19.1 使用make 工具

make工具是编译辅助工具,用来解决使用命令编译工程非常繁琐的问题。

调用这个命令工具:我们在windows上编程使用ide ,我们有图形界面,有相应的按钮,比如说build 或者run 来编译。其实make 这个编译辅助工具使用也是非常简单的,我们在控制台上直接输入make命令,它就会自动调用make工具。

作者直接在这个目录下输入make ,然后报错了,因为我没有告诉make这个工具它按照什么规则来编译我们的程序。如下图所示。

19.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.coloradmin.cn/o/1919081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【car】深入浅出学习机械燃油车知识、结构、原理、维修、保养、改装、编程

汽车的五大总成通常是指发动机、变速器、前后桥、车架和悬挂系统。 发动机:是汽车的动力来源,负责将燃料的化学能转化为机械能,驱动汽车行驶。常见的发动机类型有内燃机(如汽油发动机、柴油发动机)和电动机&#xff0…

hypermill软件许可优化解决方案

Hypermill软件介绍 hyperMILL的最大优势表现在五轴联动方面 五轴联动被广泛应于汽车、工具、模具、机械、航空航天等领域,比如航空叶轮、叶片、结构件的铣削。现在很多机床和控制器都可以适应五轴铣削要求,然而在软件方面多采取定位加工方式(…

案例|LabVIEW连接S7-1200PLC

附带: 写了好的参考文章: 通讯测试工具和博图仿真机的连接教程【内含图文完整过程软件使用】 解决博图V15 V16 V17 V18等高版本和低版本在同款PLC上不兼容的问题 目录 前言一、准备条件二、步骤1. HslCommunicationDemo问题1:连接失败?问题…

..质数..

先弄清楚我们在上小学时 学的概念。 1、什么是质因数? -质因数是指能够整除给定正整数的质数。每个正整数都可以被表示为几个质数的乘积,这些质数就是该数的质因数。质因数分解是将一个正整数分解成若干个质数相乘的过程。例如,数字 12…

[激光原理与应用-109]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 12 - 焊接工艺之影响焊接效果的因素

目录 一、影响激光焊接效果的因素 1.1、光束特征 1.2、焊接特征 1.3、保护气体 二、材料对焊接的影响 2.1 材料特征 2.2 不同材料对激光的吸收率 (一)、不同金属材料对不同激光的吸收率 1. 金属材料对激光的普遍反应 2. 不同波长激光的吸收率差…

ant design pro多页签功能

效果: 原理: 1、所有需要页签页面,都需要一个共同父组件 2、如何缓存,用的是ant的Tabs组件,在共同父组件中,实际是展示的Tabs组件 3、右键,用的是ant的Dropdown组件,当点击时&…

SpringBoot新手快速入门系列教程十:基于docker容器,部署一个简单的项目

前述: 本篇教程将略过很多docker下载环境配置的基础步骤,如果您对docker不太熟悉请参考我的上一个教程:SpringBoot新手快速入门系列教程九:基于docker容器,部署一个简单的项目 使用 Docker Compose 支持部署 Docker 项…

MySQL某个字段按指定值排序,其他值按创建时间排序

项目场景: MySQL某个字段按指定值排序,其他值按创建时间排序,我们需要用到FIELD() 函数,它是一种对查询结果排序的方法,可以根据指定的字段值顺序进行排序。 order by FIELD() 函数的语法如下: ORDER BY …

[GHCTF 2024 新生赛]ezzz_unserialize

源码&#xff1a; <?php /*** Author: hey* message: Patience is the key in life,I think youll be able to find vulnerabilities in code audits.* Have fun and Good luck!!!*/ error_reporting(0); class Sakura{public $apple;public $strawberry;public function …

LiteOS增加执行自定义源码

开发过程注意事项&#xff1a; 源码工程路径不能太长 源码工程路径不能有中文 一定要关闭360等杀毒软件&#xff0c;否则编译的打包阶段会出错 增加自定义源码的步骤: 1.创建源码目录 2. 创建源文件 新建myhello目录后&#xff0c;再此目录下再新建源文件myhello_demo.c 3. 编…

GitHub Codespace从入门到放弃

洞悉技术的本质&#xff0c;享受科技的乐趣 背景 我在使用腾讯云主机打开使用github使用免费云空间编译代码。 遇到问题 在打开过程中 提升如下错误 你遇到的问题 别人也可能遇到 https://github.com/orgs/community/discussions/109419 我做了什么 阅读官方文档 https://docs.…

集群管理脚本

虚拟机集群管理脚本 文章目录 虚拟机集群管理脚本一、远程调用脚本(remote_call.sh)二、远程复制目录脚本(remote_copy.sh) 一、远程调用脚本(remote_call.sh) 如果有传命令参数&#xff0c;则执行该命令&#xff1b;如果没有传命令参数&#xff0c;则不执行。 #!/bin/bashcm…

用python识别二维码(python实例二十三)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.识别二维码 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&…

获取时间的函数

#include <func.h>int main(){time_t mainNow;time(&mainNow);printf("main time %s\n",ctime(&mainNow));return 0;} 结果如下&#xff1a; #include <stdio.h> #include <time.h> int main() {time_t mainNow;struct tm *tm_info;ch…

Windows环境+C#实现显示接口测试

代码如下&#xff1a; using Models; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; …

ThreadLocal与ThreadLocalMap

参考&#xff1a;理清ThreadLocal、ThreadLocalMap、Thread之间的关系 - 翎野君 - 博客园 (cnblogs.com) ThreadLocalMap 是 ThreadLocal 类中的一个静态内部类&#xff0c;但它存在于每个线程的 Thread 对象内部&#xff0c;而不是 ThreadLocal 实例本身。 ThreadLocal 类&am…

怎么压缩视频?推荐7款必备视频压缩软件免费版(强烈建议收藏)

如今&#xff0c;视频内容日益丰富&#xff0c;并占据了许多人的日常娱乐和工作生活。然而&#xff0c;随着高清和超高清视频的普及&#xff0c;视频文件的体积也越来越大&#xff0c;给存储和传输带来了挑战。因此&#xff0c;学会如何压缩视频文件成为了许多人的需求之一。本…

Spring Web MVC入门(1)(建立连接)

一.什么是Spring Web MVC? Spring Web MVC是基于ServletAPI构建的原始Web框架,从一开始就包含在Spring框架中.它的正式名称"Spring Web MVC"来自其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC". 二.MVC的定义 MVC是Model View Controller的缩…

[终端安全]-7 后量子密码算法

本文参考资料来源&#xff1a;NSA Releases Future Quantum-Resistant (QR) Algorithm Requirements for National Security Systems > National Security Agency/Central Security Service > Article Commercial National Security Algorithm Suite 2.0” (CNSA 2.0) C…

高性价比之战,希喂、霍尼韦尔、安德迈宠物空气净化器真实PK

在拥有孕妇与小孩的家庭中饲养宠物&#xff0c;营造一个既温馨又健康的居家环境显得尤为重要。尽管日常的打扫与清洁工作已做得相当到位&#xff0c;但空气中仍难免悬浮着细微的宠物浮毛与不易察觉的异味&#xff0c;这些长期累积下来&#xff0c;极易成为细菌滋生的温床&#…