IAR Embedded Workbench无法找到文件Pe1696,即使它正在搜索它们

时间:2013-07-08 20:09:02

标签: msp430 iar

我正在为MSP430使用IAR Embedded workbench 5.51。我正在使用C99。

我正在尝试包含来自第三方库的代码。我已将此第三方库的目录结构完全复制到主项目目录的子目录中。但是,当我尝试编译时,我得到了一堆

  

致命错误[Pe1696]:无法打开源文件“ThirdPartyLib / Subdir / file.h”

但是在日志中IAR显示:

  

搜索:“C:\ ... bla bla bla ... \ Source \ ThirdPartyLib \ Subdir \”

此库中每个源文件中的include语句都是:

#include "ThirdPartyLib/Subdir/someheader.h"

我试图通过转到:

将路径添加到C预处理器
  

项目 - >选项 - > C / C ++编译器 - >预处理器

并添加以下行:

$PROJ_DIR$\ThirdPartyLib\
$PROJ_DIR$\ThirdPartyLib\Subdir\
$PROJ_DIR$\ThirdPartyLib\Utils\

我没有选中“多文件编译”。

所有相关的源文件都已添加到项目中。我创建了一些组来模仿库的目录结构。

如果我将路径从绝对路径更改为相对路径(例如

),问题就会消失
#include "somelocalheader.h"
#include "../Utils/someotherheader.h"

但我正在处理大量文件,并希望尽可能少地修改它们。

我以前从来没有遇到过这个问题 - 有没有人知道为什么会这样呢?是否有一个简单的解决方案,所以我不必擦除每个c文件中的每个include语句?

这基本上就是我的目录树:

  • 来源
    • 调试
      • 埃克
        • Output.d43
      • 列表
        • blabla.map
      • 的OBJ
        • ...
    • 推出
      • ...
    • 设置
      • ...
    • ThirdPartyLib
      • SUBDIR
        • ......第三方代码文件在这里生活......
      • 的Utils
        • ...更多第三方代码文件住在这里......
    • ...我的代码生活在这里,与EWP,EWW等一起......
编辑#2:编辑#2: 我将ThirdPartyLib的目录移动了一个级别,因为我在/ Source /上递归运行了doxygen,并且我意识到它需要doxygen FOREVER,并且该库有自己的API。

无论如何,这就是结构现在的样子:

  • 工作副本
    • 来源
      • 调试
        • 埃克
          • Output.d43
        • 列表
          • blabla.map
        • 的OBJ
          • ...
      • 推出
        • ...
      • 设置
        • ...
      • ...我的代码生活在这里,与EWP,EWW等一起......
    • ThirdPartyLib
      • SUBDIR
        • ......第三方代码文件在这里生活......
      • 的Utils
        • ...更多第三方代码文件住在这里......

我已经将一个组添加回我的ThirdPartyLib项目,其中包含两个子组SubDir和Utils,并将Subdir和Utils目录中的所有文件添加到相应的子组中。

现在我已经尝试再次编译,我再次遇到Pe1696错误。 IAR说:

searched: "C:\...\Working Copy\ThirdPartyLib\SubDir"

但它仍然没有找到文件。

我提到了这篇文章: http://e2e.ti.com/support/low_power_rf/f/155/t/110195.aspx 我不确定它是否完全相关,因为我所包含的目录似乎没有“掉线”。 IAR显然正在搜索文件。

但我还是尝试将以下行添加到预处理器

$PROJ_DIR$\..\ThirdPartyLib\SubDir
$PROJ_DIR$\..\ThirdPartyLib\utils

这似乎没有帮助。我在消息日志中获得了这些额外的行:

searched: "C:\...\Working Copy\Source\..\ThirdPartyLib\SubDir\"
searched: "C:\...\Working Copy\Source\..\ThirdPartyLib\Utils\"

编辑#3 我尝试将EWW / EWP上升到“工作副本”,然后读取所有组和所有文件......没有骰子。我迷失在这里。最令人沮丧的部分是,在一些前开发人员完成的另一个项目中实现了相同的库,我试图以相同的方式包含它。我知道这将是微不足道的,我只是不知道是什么。

1 个答案:

答案 0 :(得分:2)

如果库中的所有#include引用都是#include "ThirdPartyLib/Subdir/file.h"形式,那么ThirdPartyLib所在的根目录应该位于预处理器包含路径中。

如果你的目录结构是:

C:\My Project\Source
             \ThirdPartyLib

然后C:\My Project将出现在预处理器包含路径中。

当编译器搜索包含文件时,它将依次连接,每个包含搜索路径的路径都带有#include指令中列出的路径,直到找到匹配的文件。