Bazelでg++の代わりにclang++を使用する方法 質問する

Bazelでg++の代わりにclang++を使用する方法 質問する

g++ はシステムのデフォルト コンパイラですが、c++ ファイルをコンパイルするために g++ ではなく clang++ を使用したいと思います。

試しsudo update-alternatives --install c++ c++ /home/guo/bin/clang++ 100CC環境を設定しました。しかし、動作しません。Bazel は依然としてコンパイラとして g++ を使用します。


ERROR: /home/guo/utils/lib/BUILD:2:1: C++ compilation of rule '//utils/lib:get_pdf' failed: linux-sandbox failed: error executing command /home/guo/.cache/bazel/_bazel_guo/d2d93a82f24e8dc5485ac1b29928428e/execroot/_bin/linux-sandbox ... (remaining 41 argument(s) skipped).
src/main/tools/linux-sandbox-pid1.cc:592: "execvp(/home/guo/lib/clang, 0x23abde0)": Permission denied
Target //utils/lib:get_pdf failed to buildenter code here
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 0.159s, Critical Path: 0.06s

Ps:/home/guo/lib/clangはディレクトリであり、私のコンピュータ内のバイナリではありません。ここにあるはずだと思います/home/guo/bin/clang++が、それを知らせる方法がわかりませんBazel


Bazel

ベストアンサー1

Bazel のデフォルトの C++ ツールチェーンが使用する C/C++ コンパイラを指定するには、CC環境変数を設定します (例CC=clang bazel build //...)。

--repo_envオプション (例: )を使用し--repo_env=CC=clangて、このデフォルトをプロジェクト全体またはシステム全体に設定できます.bazelrc

デフォルトの Bazel C++ ツールチェーンは、BUILD ファイルですべての関連ファイルを宣言せずに、システムにインストールされたコンパイラ、ヘッダー、およびライブラリを使用します。これは、ユーザーの構成を簡素化するためです。したがって、Bazel が認識できない方法で C++ ツールチェーンを変更する場合 (コンパイラのメジャー バージョンをアップグレードする、シンボリック リンクを gcc から clang に切り替える、ヘッダーを含むディレクトリを変更するなど) は、を実行してbazel clean --expungeキャッシュをフラッシュし、次回自動構成を再実行する必要があります。

BazelでC++ツールチェーンを指定するための堅牢なソリューションは、CcToolchainConfigInfoを使用することです。ドキュメントを参照してください。https://docs.bazel.build/versions/master/tutorial/cc-toolchain-config.htmlそしてhttps://docs.bazel.build/versions/master/cc-toolchain-config-reference.html

おすすめ記事