跳至內容

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

參見