似乎不可能在我的项目中包含已作为链接资源导入到我的项目中的文件夹路径

Duc*_*ers 3 eclipse eclipse-cdt

我的工作区中有两个文件夹:

  1. 酒吧

在 Eclipse 中打开我的项目foo后,我导航到项目中的 src 文件夹(或 inc 文件夹 - 这没有区别),然后从文件菜单中选择import,然后选择Existing Filesystem ,然后给出bar的路径,然后选择“在工作区中创建链接”选项。

(在该对话框中,这将自动检查两个子选项:“创建虚拟文件夹”和“创建相对于”PROJECT_LOC/WORKSPACE_LOC/等的链接位置。也许这是一个有争议的问题。)

现在,当然,我需要以某种方式将链接资源栏中的标头包含到我的项目foo中。

因此,我单击项目的属性。“C/C++ 常规”下的“路径和符号” 选项卡中,我将路径(作为工作区路径)添加到“包含的目录”下的链接资源

我尝试了“/bar”(这是工作区中实际存在bar 的位置),

或者,

“/${ProjName}/src/bar”(其中bar作为链接资源添加到项目中),

在这两种情况下,都无法找到链接资源中的头文件。

但是,如果我在该项目属性窗口中包含链接资源bar的绝对路径,例如/opt/workspace/bar,则可以找到头文件。

这似乎是 Eclipse 中的一个错误,如下链接。我找不到是否针对此问题实施过任何修复。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=72940 https://bugs.eclipse.org/bugs/show_bug.cgi?id=122945

Jon*_*ham 5

您面临的问题是链接文件夹在项目中的表示方式(虚拟与非虚拟)以及如何-I解决争论。

当选择是否创建虚拟文件夹时,导入文件系统向导会执行非常不同的操作。

创建虚拟文件夹已选中。

在这种情况下,所有中间文件夹都是虚拟的,即它们不对应于文件系统上的文件夹。您可以在几个地方看到这一点:

  1. 图标叠加层是一个空白方块:

在此输入图像描述

  1. 将文件添加到文件系统上的该目录不会使该文件出现在 IDE 中。这是因为各个文件是链接的,而不是它们包含的文件夹。
  2. 您可以在项目属性中看到这一点,如下所示:

在此输入图像描述

影响这些文件夹是虚拟的,它们不对应于磁盘上实际的任何内容,因此在构建时没有等效的文件传递给 GCC,因此它们被省略。

创建虚拟文件夹

在这种情况下,链接仅指向根元素。您可以在几个地方看到这一点:

  1. 图标覆盖是一个快捷方式类型的箭头:

在此输入图像描述

  1. 将文件添加到文件系统上的该目录将使该文件出现在 IDE 中。
  2. 您可以在项目属性中看到这一点,如下所示:

在此输入图像描述

影响这些文件夹是链接的,因此它们对应于磁盘上的某些内容,因此在构建时它们会被传递。

最终并发症

最后一个复杂之处是这"/${ProjName}/src/bar/inc"不是引用路径的正确方法。您正在此处构造 GCC 的参数,因此您必须解析该位置的工作区表示形式到磁盘上的位置。workspace_loc因此,用变量包围整个事物"${workspace_loc:/${ProjName}/src/bar/inc}"

"/${ProjName}/src/bar" -> /foo/src/bar/inc
"${workspace_loc:/${ProjName}/src/bar/inc}" -> /tmp/so/git/bar/inc
Run Code Online (Sandbox Code Playgroud)

GitHub 上的完整示例

我在github上添加了一个完整的示例,并将生成的 Makefiles 签入以供您参考。我的 git root 是/tmp/so/git在查看 Makefiles 时。