1. 前言
当前,在汽车电子软件产品开发中,由于软件架构划分越来越泾渭分明,MCAL BSW Bootloader 部分CDD 复杂设备驱动等要不就是相对独立,要不就是不同组织协同开发,或者直接购买供应商的代码,所以越来越多的开发团队采用 源码和 不同的静态链接库进行协同编译的方式构建目标文件。
而且在汽车行业中,整车厂大多采用自己定义的二进制软件编码规范来确保软件物料的安全性和品牌旗下的通用性,典型例子如 PSA 家的*.ulp
文件和 Geely 家的*.vbf
文件,这些都是基于嵌入式行业内通用的二进制目标文件 *.s19 *.hex 等进行自定义规则修改,增加了不同的加密和压缩算法。
尤其最近python这门语言在行业内的渗透,导致工程师不仅可以使用py解析和生成arxml,dbc ,a2l 等文件,还可以在构建目标软件中,编写py脚本,添加更为强大编译后处理手段,例如插入可变时间戳序列号,合并/拆分标定文件,数据压缩/加密等。
综上所诉,软件构建所要求的目标日渐复杂,已经超出了 集成开发环境软件IDE (Tasking,CodeWarrior,GreenHill…) 的能力,并且笔者前期的文章也讲到了持续集成在行业内的应用,使用IDE 也没有办法实现持续集成,接下来笔者将为大家介绍2020年两种主流的软件构建方案,makefile 和 modern cmake 。
2. makefile
关于makefile的介绍和教程,大家可以直接到陈皓的博客里学习,跟我一起写 Makefile ,简单来讲 ,makefile 就是make构建系统的可执行脚本,可以在里面设定编译器,源码,以及调用python等其它可执行脚本。如下为示例工程和相关makefile文件,读者可以下载此工程,learn by doing。
需要注意的是,汽车电子产品为嵌入式软件开发,所以无论使用哪个系统(windows ,linux, macos)都算是交叉编译,由于嵌入式最早发迹是Keil、IAR等破解或盗版的IDE横行,导致最初的开发者大多采用windows,由此产生的技术生态积累也大多基于win,所以即便到今天,开发嵌入式也是首选windows系统,但是随着嵌入式linux以及车联网智能驾驶等新技术点的崛起,linux系统下也逐渐完善了开发工具链,并且有了相当一部分的liunx系统下嵌入式软件开发人员。
笔者示例的环境是 windows + wsl ,终端工具使用cmder,wsl安装了ubuntu,大家也可以直接使用linux。
2.1. STM32工程示例
此示例工程是针对 STM32F4 DISCOVERY 这块开发板,存放在github上,STM32_F429DISCO_led
其中,makefile文件如下:
#------------------------------------------------------------------------------
# File : 通用Makefile
# Enviroment : windows
# Author : Shibo Jiang
# Time : 2017.11.17
# Version : 0.5
# Notes : 针对STM32F429这款芯片,需要安装make和python的环境
#---------------------------------------