【问题标题】:C: prefix in #includeC:#include 中的前缀
【发布时间】:2017-04-25 12:24:25
【问题描述】:

假设我们在project1project2 目录中有两个C 项目,每个都有自己的include 目录。 project1/src 中的源是否可以包含来自project2 的头文件,如下所示:#include <project2/def.h> 其中def.h 存在于project2/include/def.h 中?

谢谢。

编辑:为了清楚起见,假设您有这两个项目:

project1/
  - Makefile
  - include/def.h
  - main.c

project2/
  - Makefile
  - include/def.h
  - main.c

问题是,您能否在 project1 中引用具有此类包含的 project2 标题(例如在 project1/main.c 中):

#include <project2/def.h>

答案是否定的。

【问题讨论】:

  • 文件并不专属于它们所属的项目,所以是的。将其视为聚合关系
  • 您可能还想查看 gcc/clang 中的 -I 标志和 MSVC 中的 /I
  • 另外,您提到的确切情况也行不通,因为源文件位于 project1/src 中。您将不得不使用 ../../
  • @cup,请通读直到你理解真正的问题,而不是用零熵评论来回答。谢谢。

标签: c gcc makefile


【解决方案1】:

从技术上讲,不,你不能按原样

如果你真的想要:

#include <project2/def.h>

但是有project2/include/def.h,你有两种方法来处理:

如果你使用-Iproject2/include 编译,那么你创建一个子目录并将你的头文件放在那里:

project2/include/project2/def.h

您将从 project1 中以#include &lt;project2/def.h&gt; 包含它。

或者,您可以创建包含#include project2/include/def.h 的标题project2/def.h,然后调用-I.,其中.project2 源上方的目录。

以我的拙见,更好的解决方案是第一个,因为它不依赖于知道你如何命名你的 project2 源目录(它可以在本地命名为 foobar,你仍然可以@ 987654332@ 和 `#include 。

【讨论】:

  • 我就是这么想的,可惜我们不能命名空间包含目录。
  • 不管头文件在哪里,你就不能在include语句中拼凑一个文件路径吗?
  • @nicomp 我认为您最终会拥有绝对路径(我认为是“邪恶”)或跨项目文件夹结构的相对路径(我认为没有更好的办法)。
  • @Yunnosch 复制那个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 2019-01-09
  • 2015-02-04
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
相关资源
最近更新 更多