【问题标题】:C/C++ Duplicate header file names from different projectsC/C++ 来自不同项目的重复头文件名
【发布时间】:2017-11-07 06:12:21
【问题描述】:

我有一个项目使用不同组织开发的库。称它们为 lib_a 和 lib_b。对于这些库中的每一个,我都需要包含它们各自的头文件:lib_a.h、lib_b.h

事实证明,这些库中的每一个都有一个具有相同名称(但内容不同)的头文件,该头文件包含在它们各自的头文件中 - 称之为 foo.h

所以在我的编译中,我有这样的东西:

g++ -I/path/to/lib_a/headers -I/path/to/lib_b/headers ... myfile.cc -o myfile.o

其中 myfile.cc 包括 lib_a.h 和 lib_b.h

问题在于,由于首先列出了 lib_a 标头的路径,因此会加载来自 lib_a 的 foo.h。这不适合 lib_b

我知道我可以更改 lib_a.h 和 lib_b.h 中的包含语句,以指定它们各自 foo.h 的唯一路径但是每次我获得 lib_a 或 lib_b 的新副本时都必须进行该编辑.任何其他想要构建我的项目的人都必须修改他们的 lib_a 和 lib_b 安装。好像应该有更好的办法,但是我的google-fu不知道怎么问。

【问题讨论】:

  • 是否可以将 myfile.cc 拆分为使用 lib_a.h 的部分和使用 lib_b.h 的部分?
  • 并非如此 - 为了清楚起见,这被简化了。实际上,它们会非常交织在一起。
  • 尽管如此,我认为您唯一可靠的方法是拆分它们并使用包装类和代理函数使它们独立。

标签: c++ header-files


【解决方案1】:

而不是这个:

g++ -I/path/to/lib_a/headers -I/path/to/lib_b/headers .

你应该只添加一个路径

g++ -I/path/to .

并在您的来源中使用每个标题的明确名称:

#include "lib_a/headers/foo.h"
#include "lib_b/headers/foo.h"

【讨论】:

  • 是的,那肯定行得通。这就是我要做的,这样我才能不断进步。但正如我在问题中所说,这感觉像是一种 hack——我将修改 3rd 方库的源代码。每次我更新库时都会中断。并且将要求其他用户也进行修改。寻找更好的方法,我想我不是第一个遇到这种情况的人。
  • 这种情况下你不需要修改他们这边,为什么呢?
  • 因为 foo.h 包含在 lib_a.h 和 lib_b.h 中,所以我必须修改这些文件以添加特定路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 2012-01-27
  • 2020-02-24
相关资源
最近更新 更多