c++ - 避免错误包含相同文件的最佳方法是什么?
问题描述
给定文件树:
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
到编译器的包含文件搜索路径。如何做到这一点取决于您的编译器和/或环境,但这将类似于/I"..\_Include"
MSVC 中的开关或(可能)-I"../_Include"
使用 clang。这就是我在多项目解决方案中所做的,适用于将由多个项目使用的所有头文件。
但是,如果您确实需要两个(不同的)SameHeader.h
文件,那么您可能应该在 File1 的行中指定完整路径名(或者至少是限定路径)#include "SameHeader.h"
- 类似于:(#include "../../DLL1/source/SameHeader.h"
取决于文件的确切布局&文件夹)。
推荐阅读
- dependencies - 将 Python3 环境迁移到虚拟 - 管理导入依赖项
- javascript - 需要使用以下代码进行说明
- android - 无法安装应用程序:INSTALL_FAILED_VERSION_DOWNGRADE
- javascript - 在 Vue JS 中创建卡片滑块
- reactjs - 使用 Spring Boot 和 ReactJS 的 IDP 发起的 SSO
- docker - 访问在 Linux 主机上的 docker 容器中运行的 PROPER IP 上的服务
- php - 如何将 PHP cURL 数据转换为数组?
- angular - 错误类型错误:无法读取未定义的属性“帖子”
- php - 在 PHP 调度系统槽中添加范围
- python - 如何使用嵌套字典遍历 url?