除非使用完全相对路径,否则Eclipse CDT无法查找包含文件

时间:2012-09-13 05:33:51

标签: c++ eclipse include eclipse-cdt

我已经使用Eclipse一段时间了,这让我受阻。几个星期前我创建了一个库名ITS8410_LIB,然后让我坐在一个名为Reach_Lib的支持库上。该目录包括我在第一次创建项目工作正常时添加的路径。今天我完成了Reach_Lib,并将其路径添加到ITS8410_Lib。我使用项目属性C ++设置来添加工作区路径(就像我以前做过很多次)。我只有一个构建配置。路径显示在图像中(蓝色突出显示的是我在此问题中讨论的特定路径)。

enter image description here 当我将文件包含在源代码中时,Eclipse(我看到黄色问号)和编译器(我得到编译器错误)都无法找到该文件。如果我使用完整绝对路径语法添加目录路径,结果是相同的。我可以修改源代码并通过当前目录中的完整相对路径指定#include,并找到它。 Eclipse只是不会使用项目设置中指定的路径。同样的Reach_Lib有一个关联的单元测试项目,并且从那里使用工作空间设置指定路径,它工作正常。

enter image description here

今天之前添加的目录路径显示正常。路径(有两个显示此行为的库)我今天添加似乎被忽略了。我看了一下编译器设置(见下图),编译器指定的路径似乎没问题。

enter image description here

在Windows7 64位下运行(但使用32位版本的Eclipse Indigo)。 我试过了:

  1. 重建指数
  2. 多次退出并重启Eclipse
  3. 工作空间和绝对文件路径
  4. 修改包含路径的顺序
  5. 不同的.h包含项目中的文件
  6. 更新

    我查看了.cproject文件,虽然我不太了解这些文件应该是什么样子,但我觉得我有问题。也许问题是:我如何告诉Eclipse重建.cproject文件?我似乎有两个类似的部分,Eclipse变得困惑。我可以看到标记为后缀的不同版本号。在我看来,视觉编辑器让我修改一个部分,但IDE和编译器只关心另一部分。这是相关部分

    ...
    

       

                    <folderInfo id="nbeclipse.toolchain.nbl.rel.396284009." name="/" resourcePath="">
                        <toolChain id="nbeclipse.toolchain.nbl.rel.tc.1465290409" name="NetBurner Device Library" superClass="nbeclipse.toolchain.nbl.rel.tc">
                            <targetPlatform id="nbeclipse.toolchain.nbl.rel.tc.targetPlatform.283367649" isAbstract="false" name="NetBurner Module Library" superClass="nbeclipse.toolchain.nbl.rel.tc.targetPlatform"/>
                            <builder buildPath="${workspace_loc:/ITS8410_Lib/Release}" id="nbeclipse.toolchain.nbl.rel.tc.builder.2064025940" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Release ELF builder (MINGW)" superClass="nbeclipse.toolchain.nbl.rel.tc.builder"/>
                            <tool id="nbeclipse.toolchain.nbl.rel.tc.gcc.278195048" name="GNU C Compiler" superClass="nbeclipse.toolchain.nbl.rel.tc.gcc">
                                <inputType id="nbeclipse.toolchain.nbl.rel.tc.gcc.input.1060035859" name="GNU C Input" superClass="nbeclipse.toolchain.nbl.rel.tc.gcc.input"/>
                            </tool>
                            <tool id="nbeclipse.toolchain.nbl.rel.tc.gpp.767008127" name="GNU C++ Compiler" superClass="nbeclipse.toolchain.nbl.rel.tc.gpp">
                                <option id="nbeclipse.toolchain.super.gcc.directories.includepaths.1666029541" name="Include paths (-I)" superClass="nbeclipse.toolchain.super.gcc.directories.includepaths" valueType="includePath">
                                    **inside here is an option list with all my include paths**
                        ...
                    </folderInfo>
    

    然后在folderInfo关闭标记之后,另一个folderInfo部分启动

                    <folderInfo id="nbeclipse.toolchain.nbl.rel.396284009.2022231003" name="/" resourcePath="src">
                        <toolChain id="nbeclipse.toolchain.nbl.rel.tc.1982112905" name="NetBurner Device Library" superClass="nbeclipse.toolchain.nbl.rel.tc" unusedChildren="">
                            <targetPlatform id="nbeclipse.toolchain.nbl.rel.tc.targetPlatform" isAbstract="false" name="NetBurner Module Library" superClass="nbeclipse.toolchain.nbl.rel.tc.targetPlatform"/>
                            <tool id="nbeclipse.toolchain.nbl.rel.tc.gcc.1671008421" name="GNU C Compiler" superClass="nbeclipse.toolchain.nbl.rel.tc.gcc.278195048">
                                <inputType id="nbeclipse.toolchain.nbl.rel.tc.gcc.input.436341699" name="GNU C Input" superClass="nbeclipse.toolchain.nbl.rel.tc.gcc.input"/>
                            </tool>
                            <tool id="nbeclipse.toolchain.nbl.rel.tc.gpp.498310867" name="GNU C++ Compiler" superClass="nbeclipse.toolchain.nbl.rel.tc.gpp.767008127">
    
                                **the newly added paths don't show up here, if I add them manually things start working** 
    

3 个答案:

答案 0 :(得分:2)

答案的关键是由dbrank0发布,但他没有将其推广到答案,所以我只是赞成评论。 .cproject文件出错并手动编辑修复了问题。

答案 1 :(得分:1)

尝试在include目录项目设置中将相对工作空间路径替换为实际路径(在文件系统中添加相同的包含)。

答案 2 :(得分:0)

完全绝对路径随时都可以。 当使用相对目录时你应该小心。 在eclipse中,当前目录与运行目录不同。

string strRunDir, strCurDir;
strRunDir = AfxGetApp()->m_pszExeName;
strCurDir = GetCurrentDirectory(...);

和strRunDir!= strCurDir;

如果要使用相对目录,则应引用runDir;