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

嵌入式1_ARM学习(六)——Makefile

一、前言

  • 对于程序编译,无论是 C还是C++首先要把源文件编译成中间代码文件,在 Windows 下也就是 .obj 文件,UNIX 下是 .o 文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的 Object File 合成执行文件,这个动作叫作链接(link)。 
  • 编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在 C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。 
  • 一般来说,每个源文件都应该对应于一个中间目标文件(O 文件或是 OBJ 文件)。链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O 文件或是 OBJ文件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在 Windows 下这种包叫“库文件”(Library File),也就是 .lib 文件,在 UNIX下,是 Archive File,也就是 .a 文件。 

二、Makefile

Makefile 是一种常用于编译的脚本语言。它可以更好更方便的管理你的项目的代码编译,节约编译时间(没改动的文件不编译)。

为什么需要Makefile?

  • Makefile是用来管理工程的
  • 在一个正式的软件项目中,由很多个.c和.h文件构成,此时如果直接在命令行编译,就会像这样:gcc a.c b.c c.c d.c e.c f.c g.c -o exe 每次编译都要输入一堆东西很麻烦,这个问题严重影响工作效率,怎么办?Makefile来解决(makefile全部小写也可以)
  • Makefile文件可以通过make  命令来执行,它告诉 make 命令需要怎么样的去编译和链接程序。 

Makefile中的一些基本概念

  • 其中的all  就是目标文件也是make  默认要执行的文件,a.c b.c 就是要生成那个 target 所需要的文件或是目标。 再下面就是生成目标文件要执行的命令。
  • clean:这个命令和上面的命令是没有什么关联的,所以make  时clean 后面的命令不会被自动执行,需要执行“make clean”命令来清除所有目标文件,便于重新编译(比如说有个压缩包别人编译过,或者自己编译过修改源代码想重新编译)

目标:目标顶格写,后面是冒号(冒号后面是依赖)

依赖:依赖是用来产生目标的原材料。

命令:命令前面一定是Tab,不能是定格,也不能说多个空格。命令就是要生成那个目标需要做的动作。

  • Makefile的基本工作原理
  • 其一,当我们执行 make xx 的时候,Makefile会自动执行xx这个目标下面的命令语句。
  • 其二,当我们make xx的时候,是否执行命令是取决于依赖的。依赖如果成立就会执行命令,否则不执行。
  • 其三,我们直接执行make 和make 第一个目标  效果是一样的。(第一个目标其实就是默认目标)

参考:跟我一起写 Makefile    作者:陈皓
 


http://www.kler.cn/a/369227.html

相关文章:

  • 浅析Android View绘制过程中的Surface
  • python实现放烟花效果庆祝元旦
  • Solon 拉取 maven 包很慢或拉不了,怎么办?
  • 机器视觉-相机、镜头、光源(总结)
  • 华为鸿蒙HarmonyOS应用开发者高级认证视频及题库答案
  • Python条形图 | 指标(特征)重要性图的绘制
  • 【GPIO】2.ADC配置错误,还是能得到电压数据
  • CRC 校验码
  • 【iOS】知乎日报第一周总结
  • Vue3_开启全局websocket
  • Qt6切换音轨
  • ffmpeg视频滤镜:均值模糊-boxblur
  • MAN Truck Bus EDI 需求分析
  • Flutter Column组件实战案例
  • 2024 最新 frida技术栈 第一部分
  • Linux云服务器安装Docker、MySQL、Redis
  • 国产系统安装Oracle报错处理
  • 利用 Google AI 工具提升应用智能化:ML Kit、TensorFlowLite、Cloud Vision、AutoML、Gemini
  • 手机折叠屏贴膜应用
  • 【AI日记】24.10.27 了解AI的未来
  • 0基础学java之Day16
  • 缓存预取文章比较分析
  • 来源爬虫程序调研报告
  • 【山西】《信息化项目软件运维费用测算指南》(DB 14/T 2163-2020)-省市费用标准解读系列01
  • 【Vue】word / excel / ppt / pdf / 视频(mp4,mov) 预览
  • 「ZJUBCA秋季迎新见面会预告」