汽车电子expert成长之路

本博客发布的个人原创精品----嵌入式系统技术文章,欢迎大家参考学习,并转发分享!

S32DS使用Tips--如何在同一个S32DS工程中同时编译静态库和应用程序

0
阅读(608) 评论(0)

S32DS使用Tips--如何通过创建新的编译目标(Build Target)在同一个S32DS工程中同时编译静态库和应用程序

内容提要


引言


1. 什么是S32DS工程的编译目标(Build Target)

1.1 编译目标的作用

1.2 新建S32DS工程默认编译目标配置和用途介绍


2. 通过创建新的编译目标(Build Target)在同一个S32DS工程中同时编译静态库和应用程序的具体方法和步骤

      2.1 新建静态库和应用工程

       2.2 在应用工程中创建新的编译目标并复制静态库工程的编译目标配置用于编译静态库

总结(如何创建和配置CodeWarrior IDE的编译目标)


引言


之前我发了一篇介绍S32DS中如何编译和调用静态库的文章--《S32DS使用Tips--如何编译生成和调用静态库》,然后有读者留言问如何在同一个S32DS工程中同时完成静态库的编译和调用。基于之前文章的介绍,这里给大家讲讲如何通过创建新的编译目标(Build Target)在同一个S32DS工程中同时编译静态库和应用程序。


1. 什么是S32DS工程的编译目标(Build Target)


1.1 编译目标的作用


S32DS工程(Project)的编译目标(Build Target),是S32DS集成开发环境(IDE)中对当前工程中预编译器、编译器、汇编器和链接器以及输入输出文件格式/调试信息/优化等级等的配置集合,即通过工程属性配置的所有选项的集合,控制着完整的工程编译结果。


Tips:关于S32DS的工程属性配置,请参考本公众号之前的文章--《S32DS 使用 tips--工程属性配置(编译选项和C编译器、汇编器及链接器设置)》;


1.2 新建S32DS工程默认编译目标配置和用途介绍


默认的新建S32DS工程,有Debug、Debug_RAM和Release三个编译目标,其差异和用途如下:

8.jpg

Tips:


a. 由于S32DS是基于GNU的工具链,编译器(gcc)优化这一块目前还不是很完善,建议量产时还是使用Debug的编译目标,以保证编译结果能够正常运行;


b. 编译目标中工具链的调试信息等级(debug level)配置,只影响elf文件中包含调试信息的多少,不会影响最终生成的编程文件(S19/HEX/BIN)大小,因为编程文件中不包含任何调试信息;


c.一个S32DS工程可以有多个编译目标,用户可以通过工程属性创建、配置不同的编译目标实现应用工程的个性化编译;


2. 通过创建新的编译目标(Build Target)在同一个S32DS工程中同时编译静态库和应用程序的具体方法和步骤


 2.1 新建静态库和应用工程


首先,新建一个可以编译生成静态库的S32DS工程(具体方法和步骤,请参考之前的公众号文章--《S32DS使用Tips--如何编译生成和调用静态库》);

并在同一个workspace下,新建一个相同目标MCU的S32DS应用工程如下(以S32K144为例):

9.jpg

10.jpg


2.2 在应用工程中创建新的编译目标并复制静态库工程的编译目标配置用于编译静态库


然后,在新建应用工程的工程属性设置中,通过复制静态库工程的编译目标配置创建一个用于编译生成静态库的编译目标


具体方法和步骤如下:


Step1:通过Manage Configuration-->选择New..-->创建新编译目标配置,输入编译目标名字(这里为MyLib_Build)和描述,选择Copy settings from:Import from project-->下拉选择当前workspace下的已经创建好的静态库工程编译目标配置(这里为S32K144Lib>Debug)-->OK:

11.jpg

12.jpg


Step2:选择Configuration为新建的编译目标--MyLib_Build,将其设置为active,并对其进行配置:

13.jpg

Step3:将要编译到静态库中的C源文件和头文件拷贝到新建应用工程的专门目录下(比如新建一个MyLib目录),并将该目录添加到新建编译目标--MyLib_Build的C CompilerIncludes paths下:

14.jpg


Tips:在新建编译目标--MyLib_Build的Build Artfact下,确认输出类型(Artfact Type)及修改输出静态库名字(Artfact name)、扩展名(Artfact externsion)和输出前缀(Output prefix):

15.jpg


Step4:手动将包含静态库要编译的源文件和头文件的目录添加到新建编译目标的目标路径(Build path)

选择MyLib,右键-->Build path--Add to-->MyLib_Build:

16.jpg

Step5:选择编译目标为新建编译目标--MyLib_Build进行编译即可在当前应用工程的根目录下生成一个与编译目标同名的新目录(这里为MyLib_Build),并生成相应的静态库文件:

17.jpg

Step6:最后,在应用工程的工程属性设置中将Debug设置为当前编译目标(active),并在其C compiler的Libraries中设置上面编译生成的静态库和路径即可完成调用:

18.jpg

总结(如何创建和配置CodeWarrior IDE的编译目标)


本文介绍的是S32DS工程的编译目标创建和设置方法,其同样适用于其他基于elipse的MCU软件集成开发环境--比如CodeWarrior 10.6/7,在经典版的CodeWarrior IDE(比如v2.10、V5.1/2和v6.3)应用工程中也有编译目标的使用,其创建方法与本文介绍的类似,具体如下:

菜单Project-->Creat Target..

19.jpg

然后,输入编译目标名字,并选择新目标为空目标或者从当前workspace下克隆已有工程的编译目标设置(推荐)

20.jpg

最后,切换至Targets,单击新建目标前面圆圈正中的小红点切换编译目标即可,这样就可以个性化配置当前工程的编译链接过程以及输入输出选型等了

21.jpg