C++包含相对路径中断

C++包含相对路径中断,c++,makefile,path,include,relative-path,C++,Makefile,Path,Include,Relative Path,我目前正在开发一个大型金融应用程序 有多个模块分别编译,然后合并到更高级别的makefile中 由于设计不好,很多头文件包含很多本地包含 我的问题是,当我在当前源文件/src/rwBatch/calcVol.C中包含/src/equity/pdeModels/equitil.H时,equitil.H开头的所有包含开始中断,并给出一个错误:../../equity/pdeModels/equitil.H:15:30:致命错误:ulbase/SpotPrice.H:没有终止此类文件或目录编译 rwB

我目前正在开发一个大型金融应用程序

有多个模块分别编译,然后合并到更高级别的makefile中

由于设计不好,很多头文件包含很多本地包含

我的问题是,当我在当前源文件/src/rwBatch/calcVol.C中包含/src/equity/pdeModels/equitil.H时,equitil.H开头的所有包含开始中断,并给出一个错误:../../equity/pdeModels/equitil.H:15:30:致命错误:ulbase/SpotPrice.H:没有终止此类文件或目录编译

rwBatch和equity文件夹将分别编译并在稍后链接在一起。这是makefile的问题吗?或者我应该如何着手解决这个问题

深入的例子:

/src/Module1/file1.C /src/Module2/folderA/file2.H /src/Module2/folderB/file3.H

当我在file1.C中写入include../folderA/file2.H时,由于file2.H而出现错误。在file2.H的开头有几个include,例如include/folderB/file3.H,在file1.C中编译时会导致致命错误:/folderB/file3.H:没有终止此类文件或目录编译

这是makefile的问题吗?或者我应该如何解决这个问题?

在include语句中指定路径几乎总是一个坏主意。它获取构建器所需的信息,而不是代码所需的信息,并将其锁定到代码中

只要没有名称冲突,例如folderA/file3.h和folderB/file3.h,您就可以简单地删除这些路径。改变这些:

// file1.c:
#include "../folderA/file2.H"

// file2.H:
#include "/folderB/file3.H"
对这些:

// file1.c:
#include "file2.H"

// file2.H:
#include "file3.H"
在makefile或其他生成系统中:

gcc -I/src/Module2/folderA -I/src/Module2/folderB -c /src/Module1/file1.C -o /wherever/file1.o

如果存在名称冲突,并且您有一个依赖于两个同名头的模块,那么您可以使用一些选项。最简单的——可能也是最好的——是重命名一个或两个标题。如果确实需要,您可以将路径放入include语句中,但路径应该反映您使用的目录结构,而不是相反。

可以通过向编译器命令行添加新的include搜索路径来解决,但这一点信息很难判断。你能提供一个更详细的例子吗?对于这样的问题,完全打开是很棘手的,因为我们可能没有您的构建系统可供试验,但请查看您可以达到的距离。您可以更改头文件还是仅更改生成文件?@Beta I可以更改both@user4581301我用一个更详细的例子更新了这篇文章