2017-04-25 98 views
-1

假设我们在目录project1project2中有两个C项目,每个项目都有自己的include目录。 project1/src的来源是否有可能包含project2这样的标题文件:#include <project2/def.h>def.hproject2/include/def.hC:前缀#include

谢谢。

编辑:要清楚,让我们说你有这两个projets:

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

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

的问题是,你可以在PROJECT1指项目2的头与这样的包括(在project1/main.c例如):

#include <project2/def.h> 

答案是否定的。

+0

文件不属于它们所属的项目,所以是。将它看作一个聚合关系 – CinCout

+0

在Include语句中使用绝对文件路径或者甚至构建良好的相对文件路径,并且还考虑使用“”如果你构建了这个棘手的相对文件路径的文件名的分隔符 – nicomp

+0

你可能也想看看MSVC中gcc/clang和'/ I'中的'-I'标志 –

回答

1

从技术上讲,不,你不能,因为是

如果你真的想:

#include <project2/def.h> 

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

,如果你有-Iproject2/include编译,然后创建一个子目录,把你的头有:

project2/include/project2/def.h 

您将从project1中包含为#include <project2/def.h>

或者,您可以创建头project2/def.h将包含#include project2/include/def.h,你会打电话给-I.其中.高于project2来源的目录。

更好的解决方案,我认为是第一个,因为它不依赖于知道如何命名您的project2源目录(它可以命名为foobar本地,您仍然可以-I/path/to/foobar/include/和#include。

+0

这就是我认为的,太糟糕了,我们不能命名空间包括目录。 – friedrich

+0

无论头文件位于何处,你能不能在include语句中拼凑文件路径? – nicomp

+0

@nicomp我认为你最终可能拥有绝对路径(我认为是“邪恶”)或跨项目文件夹结构的相对路径(我认为没有什么更好的)。 – Yunnosch