【发布时间】:2017-11-27 01:04:18
【问题描述】:
运行 OS X 10.10.5
当我运行以下命令时:clang -x c -v -E /dev/null 我在输出中看到:
clang -cc1 version 7.0.2 based upon LLVM 3.7.0svn default target x86_64-apple-darwin14.5.0
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/Applications/Xcode.app/Contents /Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/include
/Applications/Xcode.app/Contents /Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
/usr/include
/System/Library/Frameworks (framework directory)
/Library/Frameworks (framework directory)
End of search list.
现在如果我查看目录/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
我在那里只看到一个头文件,外加一个名为“c++”的目录:
ls -l /Applications/Xcode.app/Contents /Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
total 0
-rw-r--r-- 1 root wheel 6235 Nov 11 2015 FlexLexer.h
drwxr-xr-x 3 root wheel 102 Nov 11 2015 c++
如果查看目录“c++”,我会看到目录“v1”:
ls -l /Applications/Xcode.app/Contents /Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++
total 0
drwxr-xr-x 102 root wheel 3468 Nov 11 2015 v1
最后,如果我查看目录“v1”,我会看到标准 C++ 库头文件,例如:字符串、向量、映射、iostream 等。
显然,即使 clang 告诉我它会搜索
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/
它实际上看起来要低两个子目录才能找到标准的 c++ 头文件。
现在,如果我在/usr/local/include 中添加一个标头,编译器会发现该标头没有问题。
但是如果我创建一个子目录/usr/local/include/mysub/ 并在其中放置一个标头,编译器将找不到它。现在我知道了,当然我可以添加一个-I/usr/local/include/mysub 以便能够找到我放在那里的标题。但我的问题是:为什么会有差异?? 为什么 clang 会在 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/ 下面的两个子目录中查找 std c++ 头文件,但不会在 /usr/local/include 下面查看,除非我特别告诉它这样做(带有-I 标志)??
这只是在 clang 的源代码中硬编码的吗?或者有没有办法可以将它配置为自动查看包含路径中任何目录的子目录?谢谢。
【问题讨论】: