能不用sudo make install或往/usr/local写入而使用llvm——关键是通过-dcmake_install_prefix指定本地可写路径(如$home/llvm-install),再配置path和库路径环境变量使shell识别新二进制。

不能用 sudo make install 或往 /usr/local 写入,照样能用 LLVM —— 关键是绕过系统级安装,走本地路径 + 环境变量控制。
为什么默认安装会失败
执行 make install 时,CMake 默认把二进制、头文件、库文件往 /usr/local/bin、/usr/local/include 这类需要 root 权限的路径写。没有管理员权限,直接报错 Permission denied,哪怕编译成功也没法用。
这不是 LLVM 本身的问题,而是 CMake 的默认行为。它不关心你有没有权限,只按 DCMAKE_INSTALL_PREFIX 指定的位置硬写。
常见错误现象:make install: cannot create regular file '/usr/local/bin/clang': Permission denied
用 -DCMAKE_INSTALL_PREFIX 指向自己可写的目录
这是最核心的一步:告诉 CMake “别碰系统目录,全给我放我自己的文件夹里”。
- 选一个你有完全读写权限的路径,比如
$HOME/llvm-install或$HOME/local - 配置时显式传入该路径:
cmake -S llvm -B build -DCMAKE_INSTALL_PREFIX=$HOME/llvm-install ... - 之后
make install就只会往$HOME/llvm-install下写,不会触发权限错误 - 注意:这个路径必须存在,且不能是只读(比如某些 NFS 挂载点),否则仍会失败
让 shell 找到刚装的 clang 和 llvm-config
装进 $HOME/llvm-install 后,命令还在那里,但 shell 默认找不到。得靠 PATH 和 LD_LIBRARY_PATH(Linux)或 DYLD_LIBRARY_PATH(macOS)拉一把。
- 把
$HOME/llvm-install/bin加进PATH:export PATH=$HOME/llvm-install/bin:$PATH - Linux 上还需加库路径:
export LD_LIBRARY_PATH=$HOME/llvm-install/lib:$LD_LIBRARY_PATH - macOS 上对应:
export DYLD_LIBRARY_PATH=$HOME/llvm-install/lib:$DYLD_LIBRARY_PATH - 建议把这些 export 写进
~/.bashrc或~/.zshrc,避免每次重开终端都手动输 - 验证是否生效:
which clang应返回$HOME/llvm-install/bin/clang;clang --version要能正常输出
编译时跳过 install 步骤,直接用 build 目录里的二进制
如果连 make install 都不想跑(比如磁盘空间紧张,或只想临时试用),可以直接用 build/bin 下未安装的二进制。
- 编译完后,
build/bin/clang、build/bin/llvm-config已可直接执行 - 不用
install,省掉一次拷贝,也完全规避权限问题 - 缺点:路径长(
$HOME/llvm-project/build/bin/clang),且llvm-config返回的路径仍是 build 目录结构,可能影响某些依赖自动探测的构建脚本 - 适合快速验证、CI 临时环境、或仅需单个工具(如只用
clang++做语法检查)
最容易被忽略的是:即使指定了 DCMAKE_INSTALL_PREFIX,如果后续没改 PATH,shell 依然调用系统自带的老版本 clang —— 表面“装好了”,实际运行的不是你编译的那份。务必用 which 和 clang --version 双重确认。











