IAR 工程文件分析

注意:下文以IAR 7.2 For ARM版本来分析XML工程文件

初衷

IAR工程中添加文件,一直很麻烦,最近发现RTT用Scons能自动生成IAR模版,并添加源文件,为此分析了IAR工程管理结构,重点在于源文件管理结构

构建语法

采用标准XML形式来构建工程

在新建工程后,IAR默认包含debug和release两个模版,在XML文件中,有所体现,我们可以在XML中删掉release的配置信息,减轻我们分析的负担

IAR 工程结构

  • *.ewp IAR工程文件,包含配置项和文件列表
  • *.ewt IAR配置文件,包含C-STAT和RuntimeChecking的信息
  • *.dep IAR调试信息配置,主要用于描述源文件和obj文件的关联信息
  • *.eww IAR workspace,用于管理多个project
  • *.ewd 调试相关,比如选择的调试器和调试器ID等等

简单介绍一下用途
1)如果只是保留基本工程信息,不需要调试器和链接器的信息,只保留ewwewp文件即可
2)如果需要保存链接器和调试器信息,保留ewp, ewt, dep, eww四个文件即可
3)ewt主要包含一些静态检查和动态检查,可以不用这些配置项

也就是说,在复制IAR工程时,只需要保留这几个文件,其它的文件(夹)都可以删掉,比如setting, Debug,Release文件夹

因为分析IAR主要是为了自动生成模版文件,所以下面重点分析ewp文件结构

ewp文件分析

打开文件,可以看到顶层结构为

1
2
3
4
5
6
<project>
<fileVersion>2</fileVersion>
<configuration>Debug工程配置</configuration>
<configuration>Release工程配置</configuration>
<file>工程文件结构</file>
</project>

这里加注了行号,第3/4行为工程具体配置,包括DebugRelease版本配置,还可以添加其它配置页,为了简化分析,我删掉了Release配置项,再次打开IAR工程,如下所示:

第5行是工程文件目录结构,也是我们重点分析的部分,主要分为两块

  1. 单个文件
  2. 目录组织结构

我在创建IAR工程时,只包含一个main.c文件,XML对应结构如下

1
<name>$PROJ_DIR$\main.c</name>

尝试添加两个源文件test.c test.h, XML 结构变成下面的形式

1
2
3
4
5
6
7
8
9
<file>
<name>$PROJ_DIR$\main.c</name>
</file>
<file>
<name>$PROJ_DIR$\test.c</name>
</file>
<file>
<name>$PROJ_DIR$\test.h</name>
</file>

可见每一个文件对应一个file结构,我们尝试新建一个group,然后将test.c和test.h文件放到里面

1
2
3
4
5
6
7
8
9
10
11
12
<group>
<name>test</name>
<file>
<name>$PROJ_DIR$\test.c</name>
</file>
<file>
<name>$PROJ_DIR$\test.h</name>
</file>
</group>
<file>
<name>$PROJ_DIR$\main.c</name>
</file>

可见增加了一个group结构,并用name来表示group的名字
OK,分析到这里,我们就可以利用python来编写脚本自动添加文件到IAR工程中了

至于Debug配置项的细节信息,等有机会慢慢研究