如何在keil下实现单工程多目标的设置(选择性自动编译)

最近在研究Cortex-M系列CPU,整了一个工程来进行不同MCU之间的移植测试,其中涉及到Cortex-M0、Cortex-M3、Cortex-M4等多款MCU。于是产生了一个想法,如何在Keil里面建立一个【单工程多目标】的工程?换句话说就是,只有一个工程项目文件,将所有涉及到的代码文件全部关联进去,但是在编译的时候可以自由的选择不同的目标平台,进而由编译器自动纳入所需要的源文件进行编译,去除多余的文件,从而生成所对应的目标文件。这样的事情,在linux下也就是一个脚本而已,但是在Keil下,我还没有试过,不知道行不行。

不过,说干就干。咱就来试试吧。下面就以一个很简单的示例来介绍一下如何实现在同一个工程里实现不同目标文件的自动编译。

一、规划工程目录

首先介绍一下我的示例工程的目录架构。

这里写图片描述

project目录下存放工程文件,sources目录下存放源代码。为了简单起见,这里的源代码只包含2个,一个是所有工程共用的main模块,一个是每个工程下不一样的drv模块。main模块直接存放在sources目录下,而drv模块则分别存放于以不同型号mcu命名的子目录下,如下图:

这里写图片描述

这里写图片描述

二、建立项目工程

打开keil,建立工程文件。我这里的keil是5.0版本的,大家如果使用太旧的版本,可能会遇到其他问题,建议更新到这个版本。

这里写图片描述

输入工程名,我输入的是multi_project,确认就可以建立出新的工程了。然后选择“manage project items”,完成工程名、源码目录以及代码文件的添加。如下图:

这里写图片描述

注意:这里的cortex_m0、cortex_m3、cortex_m4指的就是上面所说的工程名字,接下去针对这里的每一个工程单独进行设置。选择cortex_m0工程,点击下方的“set as current target”按钮,然后点击OK关闭对话框!

这里写图片描述

这样就将当前的工程设置为了cortex_m0,而不是cortex_m3或者cortex_m4。这一点,可以从下图中看出。

这里写图片描述

三、设置工程属性

1、设置编译参数

再次右击工程,不过这次不选item,而是选择“options”,如下图:

这里写图片描述

打开属性对话框,完成工程相关属性的设置,这里仅做贴图演示,具体内容就不一一解释了。

这里写图片描述

这里写图片描述

这里写图片描述

完成所有设置之后,点击确认,关闭对话框。

2、指定包含关系

接下去还要完成cortex_m0工程下的依赖目录以及需要编译的文件的指定。因为main模块是所有工程都需要包含的,所以无需额外设置。但是drv模块是根据不同MCU来选择的,因此,在cortex_m0工程里,我们只需要包含cortex_m0模块对应的drv模块就好,其他两款MCU的驱动模块不需要包含。于是要在cortex_m0对应的drv模块目录上右击,选择属性:

这里写图片描述

将其设置为本工程可用的状态。

这里写图片描述

然后再分别选择drv_m3和drv_m4两个目录,同理将其设置为不可用的状态。

这里写图片描述

这里写图片描述

设置完成之后,再回到目录视图,可以看到被选择为不可用的两个drv目录上,出现了一个红色的禁用标志:

这里写图片描述

3、完成其他工程的设置

至此完成了cortex_m0工程的选项设置。于是,接下去还要依葫芦画瓢的完成cortex_m3工程、以及cortex_m4工程的选项设置。具体办法是,再次右击工程,选择“manage project items”,在弹出的窗口中,选择cortex_m3作为当前活动工程。如下图所示:

这里写图片描述
然后再重复上述步骤,完成cortex_m3工程的选项设置。之后再重复一次本轮操作,完成cortex_m4工程的选项设置。

这里写图片描述

最终实现的效果,可在目录结构视图中再次得到确认:

这里写图片描述

这里写图片描述

可以看到,在m3的工程中,m0和m4的驱动模块组已被禁用,而在m4的工程中,m0和m3的驱动模块组已被禁用。这就实现了不同工程下的关联文件的适配。

至此,完成了上述3个工程的全部设置过程。将你所需要的工程设置为当前的活动工程,然后点击编译,系统就会自动识别出所关联的文件并编译出对应的目标文件。如下图所示:

这里写图片描述

四、附录

为了便于交流,将本文中所演示的示例工程,打包上传在本人的CSDN中,有需要者可以自行下载。网址是(http://download.csdn.net/download/leon1741/10139351)。

猜你喜欢

转载自blog.csdn.net/leon1741/article/details/78676470
今日推荐