Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:前缀在#include中_C_Gcc_Makefile - Fatal编程技术网

C:前缀在#include中

C:前缀在#include中,c,gcc,makefile,C,Gcc,Makefile,假设我们在目录project1和project2中有两个C项目,每个项目都有自己的include目录。 project1/src中的源是否可以包含来自project2的头文件,如下所示:#include,其中def.h存在于project2/include/def.h中 谢谢 编辑:为了清楚起见,假设您有以下两个项目: project1/ - Makefile - include/def.h - main.c project2/ - Makefile - include/d

假设我们在目录
project1
project2
中有两个C项目,每个项目都有自己的
include
目录。
project1/src
中的源是否可以包含来自
project2
的头文件,如下所示:
#include
,其中
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>
您将从项目1中以
#include
的形式将其包括在内

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


在我看来,更好的解决方案是第一个,因为它不依赖于知道如何命名
project2
sources目录(可以本地称为FooBar,您仍然可以<代码> -/PATT/to/FoABAR /Copy/< /Calp>和'````./p>文件不属于它们所属的项目,所以是的。把它看作是一个聚合关系,使用绝对文件路径,甚至是包含语句中的一个构造良好的相对文件路径,也可以考虑使用”如果您构建了复杂的相对文件路径,请在文件名上使用分隔符。您可能还需要查看gcc/clang中的
-I
标志和msvc中的
/I
。此外,您提到的确切情况也不起作用,因为源文件位于project1/src中。您必须使用../@cup,请仔细阅读,直到您理解真正的任务不要用零熵注释来回答。谢谢。这就是我所想的,可惜的是,我们不能将命名空间包含目录。你不能仅仅在包含语句中增加文件路径,不管头文件在哪里吗?@ NICOMP,我想你最终会有绝对路径(我认为是“邪恶的”)。或跨项目文件夹结构的相对路径(我认为没什么更好的)。
#include <project2/def.h>
project2/include/project2/def.h