首页 > 解决方案 > 避免错误包含相同文件的最佳方法是什么?

问题描述

给定文件树:

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 中的文件?

标签: c++dllinclude

解决方案


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

当然,您需要SameHeader.h从每个源项目目录中删除该文件,或者将优先使用该文件而不是单独文件夹中的文件。

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

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

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

但是,如果您确实需要两个(不同的)SameHeader.h文件,那么您可能应该在 File1 的行中指定完整路径名(或者至少是限定路径)#include "SameHeader.h"- 类似于:(#include "../../DLL1/source/SameHeader.h"取决于文件的确切布局&文件夹)。


推荐阅读