【发布时间】:2021-01-13 22:34:14
【问题描述】:
有没有办法告诉 gcc/g++/clang 在哪里寻找通过尖括号(“”)包含的标头?
我不对非系统文件使用尖括号约定,但问题是当我尝试使用我下载的某些包的标头时,所有包含的文件都会出错。
例如,假设我想包含来自我下载的名为 Foo 的模块的标头:
/foo-v1.0/include/DependencyA.hpp:
#ifndef DEP_A_HPP
#define DEP_A_HPP
class DependencyA
{
...
};
#endif
/foo-v1.0/include/Api.hpp:
#ifndef FOO_HPP
#define FOO_HPP
#include <Foo/DependencyA.hpp>
void doSomething(DependencyA* da);
#endif
然后,在我自己的代码中:
/mycode.cpp:
#include "/foo-v1.0/include/Api.hpp"
DependencyA* da = new DependencyA();
doSomething(da);
我得到一个编译错误:
fatal error: 'Foo/DependencyA.hpp' file not found
我尝试过使用:
clang -c mycode.cpp -isystem./foo-v1.0/include -o mycode.oclang -c mycode.cpp -isystem./foo-v1.0/include/ -o mycode.oclang -c mycode.cpp -I./foo-v1.0/include -o mycode.oclang -c mycode.cpp -I./foo-v1.0/include/ -o mycode.o
等等,无济于事。
如何告诉编译器将 <Foo/**/*> 解析为每个包含文件的特定根目录?
【问题讨论】:
-
你有问题。实际文件路径均未以
Foo/DependencyA.hpp结尾 -
您可能想要创建一个
Foo符号链接(可能在/usr/local/include,可能在您通过-isystem添加的某个项目本地目录中)指向/foo-v1.0/include -
如果您选择
man gcc,您将阅读gcc命令的文档,其中包括您正在寻找的设置/选项。确实,出于上述原因,适当的gcc设置/选项无论如何都不会帮助您;但是您应该知道man gcc为所有可用的 gcc 选项提供了完整的文档。知道在哪里可以找到以及如何阅读技术文档是每个 C++ 开发人员的必备技能。