g++ はシステムのデフォルト コンパイラですが、c++ ファイルをコンパイルするために g++ ではなく clang++ を使用したいと思います。
試しsudo update-alternatives --install c++ c++ /home/guo/bin/clang++ 100
てCC
環境を設定しました。しかし、動作しません。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。