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

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.mzph.cn/diannao/45067.shtml

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

相关文章

集群管理脚本

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

【嵌入式Linux】<知识点> GDB调试(更新中)

文章目录 前言 一、GDB调试预备工作 二、GDB的启动与退出 三、GDB中查看源代码 四、GDB断点操作 五、GDB调试指令 前言 在专栏【嵌入式Linux】应用开发篇_Linux打工仔的博客中,我们已经写了大量的源程序。但是在调试这些程序时我们都是通过printf大法和肉眼除…

评估指标:精确率(Precision)、召回率(Recall)、F1分数(F1 Score)

评估指标:精确率(Precision)、召回率(Recall)、F1分数(F1 Score) 前言相关介绍1. 准确率(Accuracy)2. 精确率(Precision)3. 召回率(Re…

Cadence23打开与关闭飞线,修改位号丝印大小

打开与关闭所有飞线: 显示部分飞线: 单独显示网络飞线尤为好用,点击上图中的网络,之后鼠标点击器件中你想高亮的网络即可单独打开部分飞线。 这里的关闭部分网络的飞线也很好用,可以临时关闭讨厌的GND飞线&#xff1a…

virturalBox+K8S部署jaeger-all-in-one

pod的yaml如下:这里使用的是主机host模式 apiVersion: apps/v1 kind: Deployment metadata:name: jaegerlabels:app: jaeger spec:replicas: 1selector:matchLabels:app: jaegertemplate:metadata:labels:app: jaegerspec:hostNetwork: truecontainers:- name: jae…

TF卡病毒是什么?如何防范和应对?

在存储芯片及存储卡领域,TF卡病毒是一个备受关注的话题。在本文中,拓优星辰将详细解释TF卡病毒的含义、来源以及如何防范和应对这一问题,帮助客户更好地了解和处理TF卡病毒的风险。 1. TF卡病毒的含义 TF卡病毒是指针对TF存储卡(T…

05:定时器中断

中断 1、定时器T0中断2、案例:通过定时器T0中断来实现灯间隔1s亮灭 1、当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方…

【数据结构】一文了解七大排序算法

文章目录 前言一.直接插入排序插入排序思想插入排序代码实现插入排序总结 二.希尔排序希尔排序思想希尔排序代码实现希尔排序总结 三.选择排序选择排序思想选择排序代码实现选择排序总结 四.堆排序堆排序思想堆排序代码实现堆排序总结 五、冒泡排序冒泡排序思想冒泡排序代码实现…

Dify 与 Xinference 最佳组合 GPU 环境部署全流程

背景介绍 在前一篇文章 RAG 项目对比 之后,确定 Dify 目前最合适的 RAG 框架。本次就尝试在本地 GPU 设备上部署 Dify 服务。 Dify 是将模型的加载独立出去的,因此需要选择合适的模型加载框架。调研一番之后选择了 Xinference,理由如下&…

易我分区大师18.8.0更新:两大功能改进

近日,易我分区大师18.8.0更新上线。此次更新重点改进了系统克隆功能,支持从第二块系统盘(从盘)克隆系统;同时,软件支持将分区的文件系统格式从FAT转换成exFAT。 01、系统克隆 系统克隆功能旨在帮助用户在…

pinia学习

conuter.ts <template><div><!-- 显示当前的计数 --><p>Count: {{ count }}</<!-- 显示计算的双倍计数 --><p>Double Count: {{ doubleCount }}</p><!-- 点击按钮以增加计数 --><button click"increment">…

基于红黑树对map和set的封装

前言 前面我们已经对红黑树做了介绍和实现&#xff0c;本期我们来对红黑树进一步改造&#xff0c;然后基于改造后的红黑树封装出map和set&#xff01; 本期内容介绍 • 红黑树的改造 • 红黑树的迭代器实现 • map的封装 • set的封装 • 全部源码 ● 红黑树的改造 我们目前…

未来互联网的新篇章:深度解析Facebook的技术与战略

随着科技的飞速发展和社会的不断变迁&#xff0c;互联网作为全球信息交流的重要平台&#xff0c;正经历着前所未有的变革和演进。作为全球最大的社交媒体平台之一&#xff0c;Facebook不仅是人们沟通、分享和互动的重要场所&#xff0c;更是科技创新和数字化进程的推动者。本文…

音视频开发—FFmpeg 从MP4文件中抽取视频H264数据

文章目录 MP4文件存放H264数据方式MP4 文件结构概述H.264 数据在 MP4 中的存储1. ftyp 盒子2. moov 盒子3. mdat 盒子 H.264 数据在 stsd 盒子中的存储&#xff08;AVC1&#xff09;AVC1与Annex-B 格式&#xff08;裸 H.264 流&#xff09;的区别 从MP4文件中提取H264裸流步骤&…

java使用easypoi模版导出word详细步骤

文章目录 第一步、引入pom依赖第二步、新建导出工具类WordUtil第三步、创建模版word4.编写接口代码5.导出结果示例 第一步、引入pom依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><…

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

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

关于锂电池的充电过程

锂电池的充电阶段大概可以分为四个阶段&#xff1a;涓流充电、恒流充电、恒压充电以及充电终止。 涓流充电&#xff1a;这是充电过程的第一阶段&#xff0c;主要用于对完全放电的电池单元进行预充&#xff08;恢复性充电&#xff09;。当电池电压低于大概3V时&#xff0c;采用最…

【学习css1】flex布局-页面footer部分保持在网页底部

中间内容高度不够屏幕高度撑不开的页面时候&#xff0c;页面footer部分都能保持在网页页脚&#xff08;最底部&#xff09;的方法 1、首先上图看显示效果 2、奉上源码 2.1、html部分 <body><header>头部</header><main>主区域</main><foot…

PaintsUndo - 一张照片一键生成绘画过程视频 本地一键整合包下载

这就是ControlNet作者张吕敏大佬的新作&#xff0c;PaintsUndo。只要你有一张图片&#xff0c;PaintsUndo 就能让它变成完整的绘画过程视频。这科技&#xff0c;绝了。 你有没有想过&#xff0c;一张静态图片也能变成一个绘画教程? PaintsUndo 就是这么神奇。你只需要提供一…

通过手机供网、可修改WIFI_MAC的网络设备

一、修改WIFI mac&#xff08;bssid&#xff09; 取一根网线&#xff0c;一头连着设备黄色网口、一头连着电脑按住设备reset按键&#xff0c;插入电源线&#xff0c;观察到蓝灯闪烁后再松开reset按键 打开电脑浏览器&#xff0c;进入192.168.1.1&#xff0c;选择“MAC 地址修改…