给定文件树:
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/