c++ - 避免错过包含相同文件的最佳方法是什么?

标签 c++ dll include

给定文件树:

DLL1
└───source
    ├───File1.h
    └───SameHeader.h
DLL2
└───source
    ├───File2.h
    └───SameHeader.h

File1 包含 SameHeader.h,这很好。 File2 包含无法编译的 File1,因为 #include "SameHeader.h"现在指向 DLL2/source/SameHeader.h。有没有办法确保 File1 使用同一个 dll 中的文件?

最佳答案

当然 - 您可以将文件 SameHeader.h 放在一个单独的文件夹中(与源文件不同),然后在要搜索的包含路径列表中指定该文件夹(在项目中选项,或在编译器命令开关中)。

当然,您需要从每个源项目目录中删除文件 SameHeader.h,否则将优先使用单独文件夹中的文件。

因此,使用您的“文件树”图,我建议:

DLL1
└───source
├───File1.h
DLL2
└───source
├───File2.h
Include
└───SameHeader.h

然后您可以将 ../Include 添加到编译器的包含文件搜索路径中。如何执行此操作取决于您的编译器和/或环境,但它类似于 MSVC 中的 /I"..\_Include" 开关或(可能)-I “../_Include” 与 clang。这就是我在多项目解决方案中所做的,针对将被多个项目使用的所有头文件。

但是,如果您确实需要两个(不同的)SameHeader.h 文件,那么您或许应该在 #在 File1 中包含“SameHeader.h” 行 - 类似于:#include "../../DLL1/source/SameHeader.h"(取决于文件的确切布局和文件夹)。

关于c++ - 避免错过包含相同文件的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57936414/

相关文章:

c++ - 为什么 “cast from ‘X*’ 到 ‘Y’ 失去精度”是一个硬错误,什么是遗留代码的合适修复

c# - 调用 dll 时从未命中断点

windows - 如何使用 CMake 链接 Windows 系统库?

java - 当尝试查找 dll 的位置时,jvm 会查看注册表吗?

asp.net - 如何在运行时动态地在另一个 ASPX 的 DIV 中显示一个 ASPX?

asp.net - Web 部署项目无法映射包含虚拟的路径

templates - Grails g:include标签包含 Controller 调用

c++ - ld : file not found:/usr/lib/crt1. o

python - 如何将python源代码转换为C++源代码

C++ 全局常量数组 : Is it guaranteed to be merged (optimized) into one copy?