无题
# 编译器
1什么是编译器?
简单的理解就是把你自己写的代码编译成执行文件。
2什么是编辑器?
编辑代码的软件都有编辑器。比如直接点击txt文件,其就是编辑器。
3芯片架构\n芯片有两个架构–X86架构和ARM架构。
比如咱们电脑就是x86架构,手机使用的芯片是ARM架构,单片机芯片也是ARM架构。不管是WIndows操作系统还是linux操作系统,自带的编译器都是X86的,但是我们要把生成的程序烧到ARM芯片里面。这就涉及到在X86机器上编译程序,生成arm的程序。所以这就需要另外一种编译器——交叉编译器。
4 交叉编译器
4.1 GNU\narm-none-eabi-gcc是GNU推出的的ARM交叉编译工具。
4.2 Codesourcery(Mentor)\narm-none-linux-gnueabi-gcc\n\n基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel\n\narm-none-elf-gcc\n\n基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。\n\n1.4.3 Linaro\narm-linux-gnueabihf-gcc\n\n由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。aarch64-linux-gnu-gcc\n\n下载地址:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads\n\n我这里使用的是gcc-arm-none-eabi-10.3-2021.10-win32\n\n## ##1.5 Makefile\nMakefile是一种语法或者说是一种格式,其告诉编译器应该在哪找文件、生成文件在哪,以及编译的信息。学过Linux的都知道执行make 指令之后,会自动执行当前目录下的makefile(Makefile)文件。我们知道Linux上可以在终端那里通过命令的时候输入命令来执行某些操作。Windows上面的cmd命令行,是不能执行make的(你可以试试)。
因此现在就需要解决这个make这个问题。
方法一:使用PowerShell(如下图所示),电脑自带。在工程文件夹目录中按下Shift按键+右键就会显示这个Shell,点击之后,进入到PowerShell。你会发现其与Linux终端一样。可以输入Linux命令就好像Linux系统一样。
方法二:下载一个MingGW。其作用就是让你能使用make\n\n下载地址:https://sourceforge.net/projects/mingw-w64/files/\n\n选择适合自己电脑的最新版本进行下载,直接下载的是压缩包文件,解压后的mingw64可直接使用,我这里选择MinGW-W64GCC-8.1.0下的x86_64-posix-sjlj。
注意:makefile文件是可以自己的,但是有的人使用CMake工具生成的,有其他帖子会使用到CMake工具,你需要的是Cmake就是用来生成makefile文件的。这里我们自己写makefile文件,所以不使用Cmake。
1.6 添加环境变量\n为什么要添加环境变量呢,因为你添加完环境变量之后,你就可以在任何路径下,使用该环境变量目录下的文件。\n\n比如:我添加了D:\xx\GNU\10 2021.10\bin,那么我就可以在任何路径直接输入该路径下的文件,就可以直接运行了。
我们知道项目工程文件夹和交叉编译器的工具不可能是在同一个目录下的。我们如果把交叉编译器的所使用到的文件的目录添加到环境变量里面。我们在项目工程文件夹中就可以直接使用编译工具了。
如上图所示:我在这个目录下需要执行makefile文件,需要用到交叉编译工具,所以我需要将其添加到环境变量。\n\n16.1如何添加环境变量\n右键点击我的电脑->点击属性\n点击高级->环境变量\n点击系统变量框中的Path\n\n\n目录路径添加到里面。\n例如:\n\n\n\n直接将上方目录复制到系统变量里面就行了。\n\n16.2 添加什么系统变量\n1、交叉编译工具的bin文件下面的目录(双击bin之后进入的目录路径)\n\n\n2、如果使用系统自带的PowerShell(可以使用make),就不用再添加MinGW的环境变量了。如果要添加MinGW的环境变量,看下图路径(其实都是bin文件夹):\n\n\n\n注意:我们使用make命令其实是使用的下图的应用程序。\n\n\n\n如果我们想直接使用make命令需要将mingw32-make.exe文件复制一份,命名为make。这样我们就可以直接使用make指令了。