有没有办法告诉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.o
clang -c mycode.cpp -isystem./foo-v1.0/include/ -o mycode.o
clang -c mycode.cpp -I./foo-v1.0/include -o mycode.o
clang -c mycode.cpp -I./foo-v1.0/include/ -o mycode.o
如何告诉编译器将
<Foo/**/*>
解析为特定的根目录,以便每个包含的文件都能找到?
Foo/DependencyA.hpp
结尾的路径。设置搜索路径无法解决这个问题,编译器试图将Foo/DependencyA.hpp
添加到你在包含搜索路径中列出的每个目录中。 - Ben VoigtFoo
的符号链接(可能在/usr/local/include
中,也可能在通过-isystem
添加的某个项目本地目录中),指向/foo-v1.0/include
。 - Ben Voigtman gcc
,您将阅读到有关gcc
命令的文档,其中包括您正在寻找的设置/选项。确实如上所述的原因,适当的gcc
设置/选项不会对您有所帮助;然而,您应该知道man gcc
提供了所有可用gcc选项的完整文档。知道在哪里找到并如何阅读技术文档是每个C++开发者所必备的技能。 - Sam Varshavchik