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 ファイルだと認識されないので注意すること。
Q. なんで Bazelの公式ドキュメント を読めばわかる内容をまとめたんですか? → A. 世の中には独創性あふれるコードを書く方がたくさんいるのです ↩︎
Gitリポジトリなどで管理されたファイルを取り込みたいときは、
git_repository
のbuild_file
やbuild_file_content
を用いれば良い(ドキュメント ↩︎