是什么让 clang 在包含路径的子目录中看起来?
What makes clang look in subdirectories of the include path?
运行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 在下面的两个子目录中查找 std c++ 标头/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/
,但除非我特别告诉它这样做(带有-I
标志),否则不会查看下面的/usr/local/include
?
这只是在 clang 的源代码中硬编码的东西吗? 或者有没有办法将其配置为自动查找包含路径中任何目录的子目录? 谢谢。
编译器驱动程序知道在哪里告诉编译器(或实际上是预处理器)在哪里查找头文件,通常是通过从包含驱动程序可执行文件的目录偏移,这是在驱动程序中硬编码的。通常不希望告诉驱动程序自动查找其他子目录,因为这通常会导致很难跟踪错误。换句话说,您希望使用-I
显式指定目录。
如果你正在开发非库应用程序,你永远不应该在/usr/local/include 或类似的目录中放置任何东西。可以说,即使您正在开发库,也不会。
- std::vector的包装器,使数组的结构看起来像结构的数组
- 看起来is_nothrow_constructible_v()在MSVC中被破坏了,我错了吗
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 尽管一切看起来都很好,但值不会交换
- 自制的上衣:看起来一样,但不完全相同
- 如何使它看起来像正在下的雪
- 如何用逗号分隔输出?如何改进此代码以使其看起来更体面?
- 我的代码看起来不错,但某些输入会导致不需要的输出
- 为什么这个结构的大小是 40,而它看起来应该是 12/24?
- 我需要将阵列样式的邻接矩阵转换为矢量样式(以使其看起来更好)
- 结构化绑定:当某些内容看起来像引用并且行为类似于引用,但它不是引用时
- 如何使QTextEdit看起来被禁用
- 在正确性或良好的代码结构方面,这种动态对象创建看起来如何
- 看起来如此主要的错误.cpp:(.text.startup+0xd6):未定义对"vtable for Counter"的引用?
- C 时间测量看起来太慢了
- 我应该如何使 std::filesystem 看起来符合 Visual Studio 2015 的标准
- 写入.ini文件 - SimpleIni SetValue 尽管看起来成功了,但什么也没做
- std::string 上的 substr 无法正常工作,因为存在一些不可见但看起来像空格的字符
- 使标题看起来像它们在不同的文件夹中
- 我如何编写看起来像方法的lambda表达式