c++ - 有没有办法告诉 g++ 编译器,不要在某个 -I 路径中查找包含 header ?

标签 c++ gcc g++

我正在尝试编译一个使用来自 2 个文件夹位置的包含 header 的 cpp 文件。这两个文件夹都有很多我的文件所需的标题。

现在,两个文件夹中都存在其中一个头文件,但问题是它们的版本不同。因此,该公共(public) header 中的函数具有相同的名称但 API 签名不同。

像这样:

文件夹A:

  • foo.hpp
  • bar1.hpp
  • bar2.hpp
  • bar3.hpp

文件夹 B:

  • foo.hpp
  • bar4.hpp
  • bar5.hpp
  • bar6.hpp

文件夹 A 的 foo.hpp 中函数 foobar 的 API: void foobar(arg1, arg2);

文件夹 B 的 foo.hpp 中函数 foobar 的 API: void foobar(arg1, arg2, arg3);

#include "foo.hpp"
#include "bar1.hpp"
...
#include "bar4.hpp"
...
...

int main(){
...
foobar (arg1, arg2);
...
}

g++ main.cpp -o MyExe -I< path-to-folder-A > -I< path-to-folder-B >

对于 header 中的各种函数,这会抛出诸如多次重新定义函数没有匹配的函数调用等错误。

所以,我的问题是:是否有任何标志告诉编译器只考虑从文件夹 A 中找到的定义而忽略文件夹 B 中的定义?

代码限制注意事项:我无法以任何方式更改 A 和 B 的文件夹或文件。我也不能给出 header 的绝对路径而不是 -I。

最佳答案

假设您可以给出更详细的相对路径:

如果文件夹b是main.cpp的子文件夹,你可以直接使用

#include "<relative-path-to-folder-b>/foo.hpp"

如果文件夹 b 不是子文件夹,您可以添加另一个 -I 指令,然后添加另一个 -I 指令:

g++ main.cpp -o MyExe -I<path-to-folder-before-b> -I< path-to-folder-A > -I< path-to-folder-B >

然后添加include

#include "b/foo.hpp"

关于c++ - 有没有办法告诉 g++ 编译器,不要在某个 -I 路径中查找包含 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57672940/

相关文章:

c++ - C 库链接到 C++

c++ - 如何防止返回指向临时变量的指针?

c++ - 如果可能存在未定义行为,为什么编译器不警告您?

c - GNU C 扩展 __attribute__(__cleanup__) 是如何工作的?

c++ - 使用 clang 和 g++ 编译此 "simple"程序时出现链接错误

linux - 使用较低版本的 GLIBC : version `GLIBC_2.11` not found (required by g++)

c++ - 为什么标准没有提供 erase-remove-idiom 的便利助手?

c++ - CreateProcess 可以启动一个进程,但是QProcess 不能……为什么?

c++ - 如何使这段代码更快(学习最佳实践)?

c++ - 传递引用阻碍 gcc 消除尾调用