跳转到内容

Clang

来自 Arch Linux 中文维基

Clang 是基于 LLVMC/C++/Objective C/CUDA 编译器。最新版本依据 “带有 LLVM 例外条款的 Apache 2.0 许可证” 分发。

安装

安装 clang 软件包。

用 Clang 构建软件包

本文或本章节可能需要合并到makepkg

附注: 用于 makepkg 的编译器标志(在 Talk:Clang 中讨论)

通用配置

要更改构建软件包时使用的默认编译器,请 编辑 以下文件:

/etc/makepkg.conf
...
export CC=clang
export CXX=clang++

若要使用 libc++ 替代 GCClibstdc++ 作为 C++ 标准库:需先安装 libc++ 软件包,再在 /etc/makepkg.confCXXFLAGS 中添加 -stdlib=libc++

如需支持链接时优化(LTO):安装 lld 软件包,再在 /etc/makepkg.confLDFLAGS 中添加 -fuse-ld=lld

若以 debug 模式构建,还需从 DEBUG_CFLAGSDEBUG_CXXFLAGS 中移除 -fvar-tracking-assignments,因为 Clang 不支持该选项。

注意: 对于指定了 GCC 专属构建选项的软件包,可能会出现构建错误,此时需编辑源软件包、PKGBUILD 文件,或注释掉 makepkg.conf 中与 Clang 相关的配置行。

Qt 软件包

Qt 软件包可能需要额外配置。Qt 有预定义的构建配置(称为 “mkspecs”),在 Linux 上默认使用 GCC

部分情况下,mkspec 会根据 CC/CXX 变量自动设置为 linux-clang;但在其他情况下(如直接调用 qmake 的软件包)则不会,因此需手动显式设置:

/etc/makepkg.conf
export QMAKESPEC=linux-clang
注意: 部分软件包需要安装 llvm 软件包,因为 linux-clang 配置会使用 llvm-ar 等工具。

Rust 软件包

当 Clang 被设为系统默认编译器时,需配置 Rust 使用 Clang 作为链接器 ——Rust 应用构建过程中,常会编译 C 代码作为依赖。

配置方法:在 /etc/makepkg.conf.d/rust.conf 中指定 Clang(可选指定 lld)。示例(使用 Clang 和 lld):

/etc/makepkg.conf.d/rust.conf
RUSTFLAGS="-Cforce-frame-pointers=yes -Clinker=clang -Clink-arg=-fuse-ld=lld"

使用静态分析工具

要分析项目,只需在构建命令的前面放置 scan-build。 例如:

$ scan-build make
提示:如果您的项目已经被编译, scan-build将不会重建,也不会对其进行分析。如需强制重新编译和分析,请使用 -B参数:
$ scan-build make -B

也可针对特定文件进行分析:

$ scan-build gcc -c t1.c t2.c

参见