C++包括断开的相对路径

C++ Include Relative Paths Broken

本文关键字:相对 路径 断开 包括 C++      更新时间:2023-10-16

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

有多个模块单独编译,然后组合到更高级别的生成文件中。

由于设计不佳,许多头文件包含许多本地包含。

我的问题是,当我在当前的源文件/src/rwBatch/calcVol.C中包含/src/equity/pdeModels/EqUtil.H时,EqUtil.H 开头的所有包含都开始中断,给出错误:../../equity/pdeModels/EqUtil.H:15:30: fatal error: ulbase/SpotPrice.H: No such file or directory compilation terminated.

rwBatchequity文件夹将分别编译并稍后链接在一起。这是生成文件的问题吗?或者我应该如何解决这个问题?

深入示例:

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

当我在文件1中写入#include "../folderA/file2.H"时。C 由于 file2.H. 在
file2 的开头出现错误。H 有几个包含,例如#include "/folderB/file3.H",当编译在 file1 中时。C 导致fatal error: /folderB/file3.H: No such file or directory compilation terminated

这是生成文件的问题吗?或者我应该如何解决这个问题?

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

只要没有名称冲突(例如folderA/file3.hfolderB/file3.h),您可以简单地删除这些路径。更改这些:

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

对这些:

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

在您的生成文件(或其他构建系统)中:

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

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