我正在为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语句?
这基本上就是我的目录树:
无论如何,这就是结构现在的样子:
我已经将一个组添加回我的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上升到“工作副本”,然后读取所有组和所有文件......没有骰子。我迷失在这里。最令人沮丧的部分是,在一些前开发人员完成的另一个项目中实现了相同的库,我试图以相同的方式包含它。我知道这将是微不足道的,我只是不知道是什么。
答案 0 :(得分:2)
如果库中的所有#include
引用都是#include "ThirdPartyLib/Subdir/file.h"
形式,那么ThirdPartyLib
所在的根目录应该位于预处理器包含路径中。
如果你的目录结构是:
C:\My Project\Source
\ThirdPartyLib
然后C:\My Project
将出现在预处理器包含路径中。
当编译器搜索包含文件时,它将依次连接,每个包含搜索路径的路径都带有#include
指令中列出的路径,直到找到匹配的文件。