我正在尝试编译一个使用来自 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/