Bazelで管理されていないライブラリをBazelで使う
Bazel で管理されていないライブラリを Bazel から使う方法について扱う1。
Bazelでプロジェクトを構築する際に、Bazel で管理されていないライブラリをリンクしたくなることがある。
cc_binary( name = "hello-world", srcs = ["main.cpp"], deps = [ # ★外部ライブラリをリンクしたい ], )
ローカルに存在するファイルを Bazel で使いたいときは、new_local_repository
を用いる2。
new_local_reppository
はWORKSPACE内で使える関数で、ローカルに存在するディレクトリにBUILDファイルを仮想的に追加できる。BUILDファイルは、build_file
で指定するか、build_file_content
でBUILDファイルの内容を直接書くことで指定する。例えば、ローカルにインストールされた OpenSSL を例に取ると、`build_file` を使う場合は
# WORKSPACE.bazel new_local_repository( name = "openssl", path = "/opt/homebrew/Cellar/openssl@3/3.0.5", build_file = "openssl.BUILD", )
# openssl.BUILD cc_library( name = "lib", hdrs = glob(["include/**/*.h"]), srcs = glob(["lib/*.dylib"]), strip_include_prefix = "include", visibility = ["//visibility:public"], )
build_file_content
を使う場合は
# WORKSPACE.bazel new_local_repository( name = "openssl", path = "/opt/homebrew/Cellar/openssl@3/3.0.5", build_file_content = """ cc_library( name = "lib", hdrs = glob(["include/**/*.h"]), srcs = glob(["lib/*.dylib"]), strip_include_prefix = "include", visibility = ["//visibility:public"], )""", )
とそれぞれ書ける。なお、後者の方法の場合、インデントに注意しないと正しい BUILD ファイルだと認識されないので注意すること。
notes
- Q. なんで Bazelの公式ドキュメント を読めばわかる内容をまとめたんですか? → A. 世の中には独創性あふれるコードを書く方がたくさんいるのです
- Gitリポジトリなどで管理されたファイルを取り込みたいときは、
git_repository
のbuild_file
やbuild_file_content
を用いれば良い(ドキュメント)