Clang
Clang 是基於 LLVM 的 C/C++/Objective C/CUDA 編譯器。最新版本依據 「帶有 LLVM 例外條款的 Apache 2.0 許可證」 分發。
要更改構建軟體包時使用的默認編譯器,請 編輯 以下文件:
/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 有預定義的構建配置(稱為 「mkspecs」),在 Linux 上默認使用 GCC。
部分情況下,mkspec 會根據 CC/CXX 變量自動設置為 linux-clang;但在其他情況下(如直接調用 qmake 的軟體包)則不會,因此需手動顯式設置:
/etc/makepkg.conf
export QMAKESPEC=linux-clang
當 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