C++包括断开的相对路径
C++ Include Relative Paths Broken
我目前正在开发一个大型金融应用程序。
有多个模块单独编译,然后组合到更高级别的生成文件中。
由于设计不佳,许多头文件包含许多本地包含。
我的问题是,当我在当前的源文件
/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.
rwBatch
和equity
文件夹将分别编译并稍后链接在一起。这是生成文件的问题吗?或者我应该如何解决这个问题?
深入示例:
/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.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"
在您的生成文件(或其他构建系统)中:
gcc -I/src/Module2/folderA -I/src/Module2/folderB -c /src/Module1/file1.C -o /wherever/file1.o
如果存在名称冲突,并且您的模块依赖于两个同名的标头,则有一些选择。最简单 - 也可能是最好的 - 是重命名一个或两个标头。如果确实必须,可以将路径放入#include
语句中,但路径应反映您使用的目录结构,而不是相反。
- Windows 和 Linux 之间的相对路径分辨率差异?
- 如何获取 CMake 单元测试的相对路径?
- 从另一个应用启动我的应用时出现相对路径更改问题
- CMake 链接 2 个具有相对路径的库
- cmake find_package CMakeLists.txt 子文件夹中的相对路径
- 在可执行文件中使用带有符号链接的相对路径
- C++流找不到相对路径
- 如何将COM .tlb文件导入具有相对路径C++文件中?
- C++包括断开的相对路径
- CMake 安装具有相对路径的目标
- CMake为什么通过相对路径链接外部库
- Boost Filesystem flowly_caronical不会在没有父文件夹的情况下解决相对路径
- 如何将共享库与具有相对路径的 CMake 链接
- 相对路径中的错误
- C 能够以其完整路径打开代码::块中的文件,但不能以相对路径作为命令行参数打开文件
- 如何在基于QT的Autodesk Maya插件中使用相对路径
- 如何使用QT程序中的默认应用程序打开使用相对路径的PDF
- Visual Studio单元使用具有相对路径的文件测试
- 在 Visual Studio 中为 SFML 设置相对路径
- 如何配置MSVC以使用__FILE__显示头文件的相对路径