有人可以解释这个 Clang 论点是如何工作的吗?

Can someone explain how this Clang argument working?

在搜索Google时,我发现下面这个命令可以显示clang默认包含路径,但它是如何工作的呢?我查看了帮助页面并知道每个参数的含义,但我无法理解这些参数如何协同工作,尤其是 c++-v 之间的 -

clang++ -E -x c++ - -v < /dev/null

clang++是程序名运行.

-E 是一个选项,告诉 clang 在预处理后停止(即它不会 运行 实际的编译器或链接器,只是预处理器)。

-x c++ 是语言覆盖选项。它告诉 clang 输入文件应该被解释为 C++ 源代码(默认行为是从扩展名中检测文件类型,例如 .cpp.o)。

我认为

-v 意味着 "verbose"。它告诉 clang 在编译期间打印额外信息。

- 不是一个选项;它是输入文件的名称。与许多其他工具一样,输入文件名 - 告诉 clang 从其标准输入中读取。

最后 < /dev/null 是一个 I/O 重定向。它告诉 shell 将 clang 的标准输入连接到 /dev/null(实际上是一个空文件)。

最后两部分有点迂回:与其让 clang 从 stdin 读取并将 stdin 重定向到 /dev/null,不如让 clang 直接从 /dev/null 读取:

clang++ -E -x c++ -v /dev/null

无论如何,重点是预处理 (-E) 一个空文件 (/dev/null),就好像它是 C++ 代码 (-x c++)。