clang -e -x c++ - -v
clang -E -x c++ - -v 会输出所有默认头文件路径
这是最直接、最可靠的方式,不依赖 IDE 或构建系统,能真实反映 clang 当前环境下对
#include <xxx></xxx>的搜索顺序。执行命令后,终端会输出大量信息,关键看中间那段以
#include search starts here:开头的列表——这些就是 clang 默认查找系统头文件(如iostream、vector)的路径,顺序即为搜索优先级。
- 必须加
-E(预处理阶段)和-x c++(明确语言类型),否则可能走 C 模式或跳过路径打印-表示从 stdin 读输入,配合是为了不卡住,实际只需输入回车或 Ctrl+D 即可退出- 在 macOS 上,常见路径包含
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1;Windows + MSVC 工具链下则可能显示 Visual Studio 的include目录- 如果看到
clang: error: no input files,说明漏了-或重定向没写对,正确写法是:clang -E -x c++ - -vclang++ --version 和 clang -dumpversion 不显示路径
这两个命令只返回版本号,完全不涉及路径信息,不能用于查头文件位置。有人误以为
clang --version会附带配置摘要,实际上它不会打印任何路径相关内容。如果你刚装完 LLVM,但
clang -E -x c++ - -v报 command not found,请先确认clang是否在$PATH中:which clang或where clang(Windows)。未找到说明安装未生效或环境变量未刷新。
Clang 22.1.3下载Clang 22.1.3 Windows 64 位历史版本安装包,适合旧项目兼容、LLVM/Clang 工具链回退、编译行为对比、链接问题复现和 C/C++ 构建环境维护。
不同 target 下路径完全不同,别套用别人的结果
clang 的默认路径高度依赖 target triple(比如
x86_64-pc-linux-gnuvsx86_64-apple-darwinvsx86_64-pc-windows-msvc)。你在 Ubuntu 上跑出来的路径,在 macOS 或 Windows 上基本无效。
- macOS 用户若装的是 Xcode Command Line Tools,路径通常落在
/Library/Developer/CommandLineTools/SDKs/...- Windows 用户若用
clang-cl,路径往往指向 Visual Studio 的VC\Tools\MSVC\...\include- Linux 用户用系统包管理器安装(如
apt install clang),路径多为/usr/lib/clang/*/include和/usr/include/c++/*- 手动编译 LLVM 时,路径取决于
-DCMAKE_INSTALL_PREFIX,且需确保lib/clang/<ver>/include</ver>存在想改默认路径?别动系统目录,用参数或配置文件
直接往
/usr/include或 SDK 路径里塞头文件(比如硬加bits/stdc++.h)看似简单,但 macOS 系统更新后 SDK 重装,路径就失效;Linux 更新 clang 版本后lib/clang/18/include变成19,旧路径也不再被扫描。更可持续的做法是:
- 编译时加
-I/path/to/headers:适用于单次构建或 CMake 中的target_include_directories()- 项目根目录放
.clangd文件,写入CompileFlags: [-I./my_includes]:VS Code + clangd 插件会识别- 生成
compile_commands.json并用--compile-commands-dir=.启动 clangd:适合大型工程,路径由构建系统决定- 避免修改
clang自带的include目录——它属于工具链本身,不是你的项目空间真正容易被忽略的是:路径行为在预处理(
-E)、编译(-c)、链接(-o)阶段并不一致,而clang -E -x c++ - -v只反映预处理阶段的#include查找逻辑。如果遇到undefined reference,那问题大概率出在库路径(-L)或符号定义上,而不是这里列出的头文件路径。












