Clang
Clang 是基于 LLVM 的 C/C++/Objective C/CUDA 编译器。最新版本依据 “带有 LLVM 例外条款的 Apache 2.0 许可证” 分发。
安装
用 Clang 构建软件包
通用配置
要更改构建软件包时使用的默认编译器,请 编辑 以下文件:
/etc/makepkg.conf
... export CC=clang export CXX=clang++
若要使用 libc++ 替代 GCC 的 libstdc++ 作为 C++ 标准库:需先安装 libc++包 软件包,再在 /etc/makepkg.conf 的 CXXFLAGS 中添加 -stdlib=libc++。
如需支持链接时优化(LTO):安装 lld包 软件包,再在 /etc/makepkg.conf 的 LDFLAGS 中添加 -fuse-ld=lld。
若以 debug 模式构建,还需从 DEBUG_CFLAGS 和 DEBUG_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
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