似乎无法在我的项目中包含文件夹的路径,该文件夹已作为链接资源导入到我的项目中
It seems not possible to include in my project, a path to a folder, that has been imported as a linked resource in my project
我的工作区中有两个文件夹:
- foo
- 栏
在 Eclipse 中打开我的项目 foo 后,我导航到项目中的 src 文件夹(或 inc 文件夹 - 这没有区别),然后从 file 菜单,我选择了 import 然后 Existing Filesystem 然后给了 bar,并选择了在工作区中创建链接的选项。
(在该对话中,这将自动检查两个 sub-options:"Create virtual folders" 和 "Create link locations relative to" PROJECT_LOC/WORKSPACE_LOC/etc。也许这是一个有争议的问题。)
现在,当然,我需要将链接资源 bar 中的 header 包含到我的项目 foo 中不知何故。
因此,我单击项目的 属性 。在 C/C++ General 下,在 Paths and Symbols 选项卡中,我将路径(作为工作区路径)添加到包含目录 下的链接资源 bar。
我尝试了两个“/bar”(bar 实际上存在于工作区中),
或者,
"/${ProjName}/src/bar"(bar 作为链接资源添加到项目中),
并且在这两种情况下,无法找到来自链接资源的 header 文件。
但是,如果我改为在此项目属性 window 中包含链接资源 bar 的绝对路径,例如/opt/workspace/bar,则可以找到header个文件。
这似乎是 eclipse 中的一个错误,如下所示。我找不到是否针对此问题实施了任何修复。
https://bugs.eclipse.org/bugs/show_bug.cgi?id=72940
https://bugs.eclipse.org/bugs/show_bug.cgi?id=122945
您面临的问题是 如何 linked 文件夹在您的项目中(虚拟与非虚拟)以及 -I
正在解决参数。
导入文件系统向导在选择是否创建虚拟文件夹时会做一些非常不同的事情。
创建虚拟文件夹 选中。
在这种情况下,所有中间文件夹都是虚拟的,即它们与文件系统上的文件夹不对应。您可以在几个地方看到这一点:
- 图标叠加层是一个空白方块:
- 将文件添加到文件系统上的该目录不会使该文件出现在 IDE 中。这是因为 link 编辑的是单个文件,而不是它们所在的文件夹。
- 您可以在项目属性中看到这样的内容:
效果 这些文件夹是虚拟的,它们不对应于磁盘上的任何实际内容,因此在构建时没有等效项传递给 GCC,因此它们被省略。
创建虚拟文件夹未选中。
在这种情况下,link 只是根元素。你可以在几个地方看到这个:
- 图标叠加为快捷方式箭头:
- 将文件添加到文件系统上的该目录将使该文件出现在 IDE 中。
- 您可以在项目属性中看到这样的内容:
Effect 这些文件夹是 linked,因此它们对应于磁盘上的某些内容,因此在构建时它们会被传递。
最终并发症
最后一个问题是 "/${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
GitHub
上的完整示例
我在 github 上添加了一个完整的示例,并留下了生成的 Makefile 以供您参考。查看 Makefile 时,我的 git 根是 /tmp/so/git
。
我的工作区中有两个文件夹:
- foo
- 栏
在 Eclipse 中打开我的项目 foo 后,我导航到项目中的 src 文件夹(或 inc 文件夹 - 这没有区别),然后从 file 菜单,我选择了 import 然后 Existing Filesystem 然后给了 bar,并选择了在工作区中创建链接的选项。
(在该对话中,这将自动检查两个 sub-options:"Create virtual folders" 和 "Create link locations relative to" PROJECT_LOC/WORKSPACE_LOC/etc。也许这是一个有争议的问题。)
现在,当然,我需要将链接资源 bar 中的 header 包含到我的项目 foo 中不知何故。
因此,我单击项目的 属性 。在 C/C++ General 下,在 Paths and Symbols 选项卡中,我将路径(作为工作区路径)添加到包含目录 下的链接资源 bar。
我尝试了两个“/bar”(bar 实际上存在于工作区中),
或者,
"/${ProjName}/src/bar"(bar 作为链接资源添加到项目中),
并且在这两种情况下,无法找到来自链接资源的 header 文件。
但是,如果我改为在此项目属性 window 中包含链接资源 bar 的绝对路径,例如/opt/workspace/bar,则可以找到header个文件。
这似乎是 eclipse 中的一个错误,如下所示。我找不到是否针对此问题实施了任何修复。
https://bugs.eclipse.org/bugs/show_bug.cgi?id=72940 https://bugs.eclipse.org/bugs/show_bug.cgi?id=122945
您面临的问题是 如何 linked 文件夹在您的项目中(虚拟与非虚拟)以及 -I
正在解决参数。
导入文件系统向导在选择是否创建虚拟文件夹时会做一些非常不同的事情。
创建虚拟文件夹 选中。
在这种情况下,所有中间文件夹都是虚拟的,即它们与文件系统上的文件夹不对应。您可以在几个地方看到这一点:
- 图标叠加层是一个空白方块:
- 将文件添加到文件系统上的该目录不会使该文件出现在 IDE 中。这是因为 link 编辑的是单个文件,而不是它们所在的文件夹。
- 您可以在项目属性中看到这样的内容:
效果 这些文件夹是虚拟的,它们不对应于磁盘上的任何实际内容,因此在构建时没有等效项传递给 GCC,因此它们被省略。
创建虚拟文件夹未选中。
在这种情况下,link 只是根元素。你可以在几个地方看到这个:
- 图标叠加为快捷方式箭头:
- 将文件添加到文件系统上的该目录将使该文件出现在 IDE 中。
- 您可以在项目属性中看到这样的内容:
Effect 这些文件夹是 linked,因此它们对应于磁盘上的某些内容,因此在构建时它们会被传递。
最终并发症
最后一个问题是 "/${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
GitHub
上的完整示例我在 github 上添加了一个完整的示例,并留下了生成的 Makefile 以供您参考。查看 Makefile 时,我的 git 根是 /tmp/so/git
。