从零开始学习嵌入式----Makefile工具


 

一、Makefile 简明指南

 

        你是否曾经面对过一堆源代码文件,却不知道如何将它们编译成可执行文件?或者你是否厌倦了每次修改代码后都要手动输入冗长的编译命令?

 

        如果是的话,那么 Makefile 就是你的救星!

 

二、Makefile 是什么?

 

        Makefile 就像是一个项目的「菜谱」,它告诉计算机如何将你的源代码文件「烹饪」成可执行文件。它使用一种简单易懂的语法来定义文件之间的依赖关系以及编译规则。

 

三、Makefile 的基本结构

 

        一个简单的 Makefile 文件包含了一系列规则,每个规则通常由以下三个部分组成:

 

1)目标 (target): 你想要生成的文件,例如可执行文件或者目标文件。

2)依赖 (prerequisites): 生成目标文件所依赖的其他文件,例如源代码文件或者头文件。

3)命令 (commands): 生成目标文件需要执行的命令,例如编译命令或者链接命令。

 

以下是一个简单的例子:

 

myprogram: main.o utils.ogcc main.o utils.o -o myprogram#  #
main.o: main.c utils.hgcc -c main.c#  #
utils.o: utils.c utils.hgcc -c utils.c

 

在这个例子中,我们定义了三个规则:

 

1)第一个规则的目标是生成可执行文件 myprogram,它依赖于 main.o 和 utils.o 两个目标文件。生成 myprogram 的命令是使用 gcc 链接器将这两个目标文件链接起来。

2)第二个规则的目标是生成目标文件 main.o,它依赖于 main.c 和 utils.h 两个文件。生成 main.o 的命令是使用 gcc 编译器编译 main.c 文件。

3)第三个规则的目标是生成目标文件 utils.o,它依赖于 utils.c 和 utils.h 两个文件。生成 utils.o 的命令是使用 gcc 编译器编译 utils.c 文件。

 

四、如何使用 Makefile?

 

        要使用 Makefile, 只需要在终端中输入 make 命令即可。 make 命令会自动读取当前目录下的 Makefile 文件,并执行相应的规则来生成目标文件。

 

五、Makefile 的优势

 

使用 Makefile 可以带来以下优势:

 

1)自动化构建过程: 你只需要编写一次 Makefile 文件,就可以自动完成项目的编译、链接等操作,大大提高开发效率。

2)跟踪文件依赖关系: Makefile 可以自动跟踪文件之间的依赖关系,只有当依赖文件发生改变时才会重新编译相应的目标文件,避免了不必要的编译时间。

3)提高代码可维护性: Makefile 可以清晰地描述项目的构建过程,使代码更加易于维护和理解。

 

 

六、总结

 

        Makefile 是一个强大的工具,可以帮助你简化项目的构建过程,提高开发效率。希望这篇简明指南能够帮助你入门 Makefile,并开始享受它带来的便利。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45080.shtml

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

相关文章

全网最适合入门的面向对象编程教程:14 类和对象的 Python 实现-类的静态方法和类方法,你分得清吗?

全网最适合入门的面向对象编程教程:14 类和对象的 Python 实现-类的静态方法和类方法,你分得清吗? 摘要: 本文主要介绍了Python中类和对象中的类方法和静态方法,以及类方法和静态方法的定义、特点、应用场景和使用方…

网安防御保护-小实验

1、DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问 2、生产区不允许访问互联网,办公区和游客区允许访问互联网 3、办公区设备10.0.2.10不允许访问DMZ区的FTP服务器和HTTP服务器,仅能ping通…

vue 环境变量那些事

常见的项目环境变量的使用 总则:使用 .env.环境名字文件去定义,运行命令的时候指定环境 比如:.env 代表所有环境变量使用的一些变量 .env.development 代表的开发环境变量 .env.production 代表的生产环境变量也就是上线以后使用的 vitevu…

自主研发接口测试框架

测试任务:将以前完成的所有的脚本统一改写为unitest框架方式 1、需求原型 1.1 框架目录结构 V1.0:一般的设计思路分为配置层、脚本层、数据层、结果层,如下图所示 V 2.0:加入驱动层testdriver 1.2 框架各层需要完成的工作 1、配…

Fast DDS library windows 下源码编译(cmake)

目录 编译环境: 编译需要的源码文件: Fast DDS编译: 注意事项: 参考文档: 基于Fast DDS 的源码来编译相关的库,然后可以通过python 来调用库文件实现dds 数据通信,本文就详细的介绍编译过程…

机器学习筑基篇,容器调用显卡计算资源,Ubuntu 24.04 快速安装 NVIDIA Container Toolkit!...

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] Ubuntu 24.04 安装 NVIDIA Container Toolkit 什么是 NVIDIA Container Toolkit? 描述:NVIDIA Container Toolkit(容器工具包)使用户能够构建和运行 GPU 加速的容器,该工具包括一个容器运行时库和实用程序,用于自动…

石油巨头受冲击!埃克森美孚、BP接连发出盈利预警

KlipC报道:近日,BP(英国石油)预计其第二季度将面临10亿至20亿美元的减值费用,并发出警告称其炼油利润率“大幅下降”,石油交易收益预计出现疲软。消息公布后,其股价下跌超4%。 由于中间馏分油利…

JavaScript(8)——函数

函数 function,是被设计执行特定任务的代码块。 函数可以把具有相同或相似逻辑的代码包裹起来,通过函数调用执行这些代码,这么做的优势有利于精简代码方便复用。类似于alert(),prompt()和console.log(),这些都是js函数,不过已经…

STL(一)

书写形式:string (const string& str, size_t pos, size_t len npos); 举例: int main(){ string url("https://mp.csdn.net/mp_blog/creation/editor?spm1000.2115.3001.4503") string sub1(url,0,5);//从下标为0开始向后5个字符&…

如何在 Python 中创建一个类似于 MS 计算器的 GUI 计算器

问题背景 假设我们需要创建一个类似于微软计算器的 GUI 计算器。这个计算器应该具有以下功能: 能够显示第一个输入的数字。当按下运算符时,输入框仍显示第一个数字。当按下第二个数字时,第一个数字被替换。 解决方案 为了解决这个问题&am…

华为OD机考题(HJ108 求最小公倍数)

前言 经过前期的数据结构和算法学习,开始以OD机考题作为练习题,继续加强下熟练程度。 描述 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。 数据范围:1≤…

Spring中的适配器模式和策略模式

1. 适配器模式的应用 1.1适配器模式(Adapter Pattern)的原始定义是:将一个类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。 1.2 AOP中的适配器模式 在Spring的AOP中,使用Advice&#…

【北京迅为】《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…

集群管理脚本

虚拟机集群管理脚本 文章目录 虚拟机集群管理脚本一、远程调用脚本(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…

掌握Postman的API请求模板:一键生成,效率倍增

📘 掌握Postman的API请求模板:一键生成,效率倍增 Postman是API开发和测试的瑞士军刀,而其请求模板功能更是提升工作效率的利器。API请求模板允许用户定义一组可重用的请求配置,从而快速生成和发送API请求。本文将深入…

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…