gpt4 book ai didi

c++ - 是什么让 clang 在包含路径的子目录中查找?

转载 作者:行者123 更新时间:2023-11-28 04:54:21 25 4
gpt4 key购买 nike

运行 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++ 库 header ,例如:string、vector、map、iostream 等。

显然,即使 clang 告诉我它会搜索/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/它实际上查找了两个子目录以找到标准的 c++ 头文件。

现在,如果我在 /usr/local/include 中放置一个 header ,编译器会发现该 header 没有问题。

但是,如果我创建一个子目录 /usr/local/include/mysub/ 并将 header 放在那里,编译器就找不到它。现在我知道了,我当然可以添加 -I/usr/local/include/mysub 以便能够找到我放在那里的 header 。但我的问题是:为什么会出现差异?? 为什么 clang 看起来在 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/< 下面有两个子目录 来查找 std c++ header ,但不会在 /usr/local/include 下面查找,除非我特别告诉它这样做(使用 -I 标志)??

这是在 clang 的源代码中硬编码的东西吗?或者有没有一种方法可以将它配置为自动查找包含路径中任何目录的子目录?谢谢。

最佳答案

编译器驱动程序知道在哪里告诉编译器(或者实际上是预处理器)在哪里寻找头文件,通常是通过从包含驱动程序可执行文件的目录偏移,这在驱动程序中是硬编码的。告诉驱动程序自动查看其他子目录通常是不可取的,因为这通常会导致很难追踪错误。换句话说,您想使用 -I 明确指定目录。

如果您正在开发非库应用程序,则永远不要将任何内容放在/usr/local/include 或类似目录中。可以说,即使您正在开发库也不会。

关于c++ - 是什么让 clang 在包含路径的子目录中查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47502684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com