メインコンテンツへスキップ

Bazelで管理されていないライブラリをBazelで使う

·635 文字·
技術解説 Bazel
komori-n
著者
komori-n

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 ファイルだと認識されないので注意すること。


  1. Q. なんで Bazelの公式ドキュメント を読めばわかる内容をまとめたんですか? → A. 世の中には独創性あふれるコードを書く方がたくさんいるのです ↩︎

  2. Gitリポジトリなどで管理されたファイルを取り込みたいときは、git_repositorybuild_filebuild_file_content を用いれば良い(ドキュメント ↩︎

Related

連続整数列の排他的論理和(xor)
·340 文字
技術解説 数学
C++で行儀よくパック展開結果を捨てる
·1660 文字
技術解説 C++
コンパイル時に重複のある順列を扱う
·2157 文字
技術解説 C++