SylixOS 操作系统Makefile 简介

1.Makefile 流程图

 

在SylixOS中每个项目都包含一个Makefile文件,每次编译都是从Makefile文件开始。

2.mk文件介绍

  •     config.mk : 与配置相关,在新建base选择体系结构,cpu类型,fpu类型,release或者debug,base路径等信息会保存到此。
  • header.mk : 将mktemp模板库中的mk文件路径转换为宏定义,根据config.mk选择输出是release或者debug。例如 base中mktemp文件中application.mk路径被定义为APPLICATION_MK。
  • gcc.mk : 除了dsp,其他体系结构的编译链相关部分内容。包含了编译参数和编译链需要链接的.
  • c6x.mk: dsp体系结构相关编译链相关的。
  • arch.mk: 会根据编译链名确定出当前的体系结构,确定cpu,fpu,内核等等编译时参数。 ARCH宏定义变为体系结构名,在后面的common.mk等文件中会使用。
  • clear-var.mk: 将一些宏定义清空。
  • xxx.mk: 这个文件是用户根据模板,依据不同项目需要生成的不同文件添加自己相应的数据。xxx.mk 文件最后调用目标文件相应的mk文件。
  • common.mk: 将在xxx.mk中用户自定义的头文件,源代码,符号等和系统的源代码,头文件的等整合。将用户自定义的每个源码文件编译成.o格式目标文件,等待后面链接。
  • 目标文件: 根据实际项目需要生成的目标文件类型最终选择不同的mk文件。
  • kernel-library.mk: 内核静态库类目标 makefile 模板。
  • kernel-module.mk: 内核模块库类目标 makefile 模板。
  • library.mk: 动态库类目标 makefile 模板。
  • libsylixos.mk: libsylixos makefile 模板。
  • lite-bsp.mk: lite 版本 bsp 类目标 makefile 模板。
  • static-library.mk: 静态库类目标 makefile 模板。
  • unit-test.mk:单元测试应用程序类目标 makefile 模板。
  • bare-metal.mk: bare-metal 类目标 makefile 模板。
  • bsp.mk:bsp: 类目标 makefile 模板。
  • gtest.mk: gtest 应用程序类目标 makefile 模板。
  • application.mk: 应用程序类目标 makefile 模板。

除去config.mk文件外,其他文件都在base/libsylixos/SylixOS/mktemp 文件夹内,如下图:

 3.编译自己的代码

上面介绍了整个Makefile编译的流程,但是还缺少一个我们添加代码,头文件等的位置。

在xxx.mk中就是根据个人项目需要添加,在相应的宏定义填充完成后,其他的mk文件会根据宏定义编译出对应的目标文件。

除去编译libsylixos外,其他文件都需要填充以下几个宏(如果不需要,刻意为空)。

  • LOCAL_TARGET_NAME  定义了目标文件名称
  • LOCAL_SRCS 定义了需要编译的源码。
  • LOCAL_INC_PATH 定义头文件路径。
  • LOCAL_DSYMBOL 定义了编译程序需要的符号。
  • LOCAL_DEPEND_LIB 定义了编译程序需要的依赖库。
  • LOCAL_DEPEND_LIB_PATH 定义了库文件所在的路径。
  • LOCAL_USE_CXX 定义了是否使用c++。
  • LOCAL_USE_CXX_EXCEPT 定义了是否使用c++ 异常。
  • LOCAL_USE_GCOV 定义了是否使用代码覆盖率检查。
  • LOCAL_LD_SCRIPT 定义bsp的链接脚本。
  • LOCAL_PRE_LINK_CMD 执行链接执行的命令。
  • LOCAL_POST_LINK_CMD 执行完链接后执行的命令。
  • LOCAL_PRE_STRIP_CMD strip执行前执行命令。
  • LOCAL_POST_STRIP_CMD strip执行后执行命令

在xxx.mk文件的最后,要根据自己编译目标文件类型调用相应的mk文件,比如目标文件类型是可执行目标程序,则在最后为“#include $(APPLICATION_MK)”

4.335x实例

  在SylixOS 335x bsp(bsp 开源地址:链接)中,打来bsp可以看到如下图:

 

  1. 打开Makefile文件,可以看到Makefile文件首先查找并执行config.mk文件。然后会查找base中的mktemp文件夹位置。根据mktemp文件就能找到其他mk文件。
  2. 执行config.mk完成后会执行header.mk,在header.mk中又会调用gcc.mk(如果是dsp会调用c6x.mk),arch.mk文件执行。
  3. Makefile里hearder.mk后面就是应该放入xxx.mk。xxx.mk最前面需要调用clear-var.mk,清除部分宏定义。xxx.mk最后调用目标文件相应的mk。335xBSP项目里这个xxx.mk就是bspok335xbsp.mk。如下图:

 

  1. bspok335xs.bsp 中就是对第四章宏定义的填充。
  2. 在bspok335xs.bsp 最后调用了#include bsp.mk 如下图,最后就编译相应的bsp文件。

      

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值