Makefile,feature.mk,交叉编译器,IAR,宏,嵌入式

宿主机:嵌入式系统资源匮乏,不能像pc一样在本地编译调试,需要借助其他平台完成这些工作,这样的系统称之为宿主机
交叉编译器:在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译,比如在ARM平台上进行本机编译就不太可能

宿主机可以是linux系统也可以是windows系统

windows系统:在windows系统下,会使用到集成环境IDE如IAR,keil,ADS等,其都是交叉编译环境,只是IDE工具隐藏了细节没有明确提出这个概率,也会使用gcc-arm-none-eabi-win32,(IDE工具可能包含了这个编译器我们看不见)

linux系统:大多时候会安装使用arm-linux-gcc,其为基于ARM体系结构的gcc编译器

什么时候使用windows系统,什么时候使用linux系统来进行嵌入式开发呢?

我们常常看到,有的人开发设备端时,使用linux系统下的交叉编译器(命令行)编译,有的人又是在windows下用IAR编译,也有一部分使用windows下的交叉编译器(命令行)编译
       1.这往往由芯片厂 商提供的开发方式所决定(什么样的环境编译速度最快,最好,其芯片适配的开发环境的适配程度),比如一款****芯片使用的IAR进行编译,最后将固件下载到芯片中,可以正常运行
        2.而另一块芯片却不使用IAR,那使用linux还是windows呢,实践中发现,windows使用交叉编译器进行编译时间长达十几分钟,然而使用linux服务器(将代码放在服务器上)进行编译却只要数秒,此时选用linux系统编译最好;
        3. 第三款芯片在windows下直接使用交叉编译器也就十几秒,那么就在windows下编译也就最方便

宏与Makefile

编译已经集成的大型工程的时候,需要选择使用什么芯片,使用什么业务,此时如果使用IAR你需要选择应该定义的宏,然后把该宏对应的文件加入到工程中,原来无需使用的文件exclude掉,十分复杂

而linux下的交叉编译环境可以使用Makefile,与feature.mk,feature.mk中定义了宏,Makefile再根据它定义的宏选择将哪些文件加入工程。这又出现一个新问题;同一个工程代码,前面讲了不同芯片可能使用不同的编译环境,当我们直接使用交叉编译环境时,在feature.mk文件中定义了宏会和代码本身定义的宏冲突吗???
        所以feature.mk文件中会使用
#ifndef config_h
#define config_h

注意:IAR需直接在代码中修改定义的宏;
Makefile是一种规则,由我们使用者来写,写出宏对应的文件关系

刚学习,仅自己理解记录,参考本文需谨慎,望大神纠正

猜你喜欢

转载自blog.csdn.net/weixin_43056962/article/details/83754315
今日推荐