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

问题描述 投票:0回答:2

我正在使用适用于 MSP430 的 IAR 嵌入式工作台 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 文件中的每个包含语句?

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

  • 来源
    • 调试
      • 执行程序
        • 输出.d43
      • 列表
        • blabla.地图
      • 对象
        • ...
    • 发布
      • ...
    • 设置
      • ...
    • 第三方库
      • 子目录
        • ...第三方代码文件在这里...
      • 实用工具
        • ...更多第三方代码文件在这里...
    • ...我的代码与 EWP、EWW 等一起存放在这里...

编辑#2: 我将 ThirdPartyLib 的目录上移了一个级别,因为我在 /Source/ 上递归运行 doxygen,并且我意识到它永远需要 doxygen,而且该库有自己的 API。

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

  • 工作副本
    • 来源
      • 调试
        • 执行程序
          • 输出.d43
        • 列表
          • blabla.地图
        • 对象
          • ...
      • 发布
        • ...
      • 设置
        • ...
      • ...我的代码与 EWP、EWW 等一起存放在这里...
    • 第三方库
      • 子目录
        • ...第三方代码文件在这里...
      • 实用程序
        • ...更多第三方代码文件在这里...

我已将一个组添加回我的 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 上移到“工作副本”,然后读取所有组和所有文件......没有骰子。我在这里迷路了。最令人沮丧的部分是,同一个库是在由一些前开发人员完成的另一个项目中实现的,我试图以相同的方式包含它。我知道这将是一件微不足道的事情,我只是不知道是什么。

msp430 iar
2个回答
3
投票

如果库内的所有

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

如果您的目录结构是:

C:\My Project\Source
             \ThirdPartyLib

那么

C:\My Project
预计将位于预处理器包含路径中。

当编译器搜索包含文件时,它会依次将每个包含搜索路径与

#include
指令中列出的路径连接起来,直到找到匹配的文件。


0
投票

其他包含目录应在两个地方更改:

  1. 在“C/C++ 编译器”中和

  2. 在“汇编器”中

  3. 项目 -> 选项 -> C/C++ 编译器 -> 预处理器 -> 其他包含目录:(每行一个):

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

  1. 项目 -> 选项 -> 汇编器 -> 预处理器 -> 其他包含目录:(每行一个):

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

© www.soinside.com 2019 - 2024. All rights reserved.