我有一个现有的 c 项目,它是基于 makefile 的,我已将其引入 Eclipse C/C++(Mars Release (4.5.0))。我能够在 Eclipse 中成功构建,但我面临的问题是该项目支持针对几种不同的体系结构,我的 makefile 处理链接适当的体系结构特定 header ,但 Eclipse 不知道它,所以我得到很多未定义的类型。
例如处理器或特定类型:
UINTN
UINT8
UINT32
etc..
全部在处理器特定的头文件中定义。位于:
\Include\X64
\Include\AArch64
\Include\Arm
\Include\IA32
etc..
我知道我的目标是 x64,因此我知道我想要使用的 header 位于 \Include\x64\
中目录。但我不知道如何告诉 Eclipse 使用其代码辅助的定义。正如所有的'Include'
文件夹位于源中,它看到所有文件夹并且无法决定要做什么。因此,当我的代码构建时,它到处都有关于无法解析的类型的红色波浪线。
在 Visual Studio 中,我完成了 Intellisense -> Include Search Path -> 我在那里添加了\Include\X64 文件夹,它解决了我的问题。但我还没能在 Eclipse 中找到等效的行为。
谢谢!
编辑:如果有人愿意/想要在我谈论的真实源上尝试这个,那就是 UEFI EDK2 源:> git clone https://github.com/tianocore/edk2
当你在 eclipse 中打开它时,检查一下
\MdeModulePkg\Application\HelloWorld\HelloWorld.c
这是它附带的示例应用程序,您将看到 eclipse 无法解析 UINT32。由于默认配置其目标为 IA32,因此您需要的包含文件是 '\MdePkg\Include\IA32\ProcessorBind.h'
。但是,尽管添加了该目录,并且文件专门添加到 eclipse CDT 包含目录中,但它仍然无法解析这些类型
编辑2:
我已经删除了所有其他架构包含目录,所以剩下的就是 x64。这没有帮助。
然后我更进一步,在 helloworld.c 示例应用程序中我 #included <ProcessorBind.h>
这是包含所有缺失定义的文件。 Eclipse 理解包含,如果我右键单击并说“打开声明”,它会打开 x64\ProcessorBind.h 但它仍然无法解析类型...帮助..
最佳答案
在项目设置下(右键单击项目并选择“属性”),导航到“C/C++ 常规”->“预处理器包括路径、宏”等。从侧面选项中选择 GNU C(如果有任何选项,请对 C++ 重复这些相同的步骤)使用这些 header 的 C++ 代码)。选择“CDT User Setting Entires”,然后单击右侧的“Add”。
选择包含目录作为类型,然后单击文件夹图标浏览到正确的文件夹。然后点击“确定”。
CDT 应该自动重建索引。如果由于某种原因没有(有时可能有点挑剔),请右键单击您的项目并选择“索引”->“重建”。
关于自定义 Eclipse 代码辅助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31576024/