Bazel調査の前置き
はい、前置きです。
とりあえずこの記事ではBazelインストールしてC++のサンプルプロジェクトをビルドするところまで書きます。
ちなみに内容的にはBazelの公式マニュアルを私の独断と偏見によって独自に翻訳して纏め直した内容になりますので、間違っていることもあります(核心的事実)。
要所要所に元ドキュメントへのリンクを貼っていますので、ご利用は計画的に♥
そもそもBazelって?
だいぶ前の記事でも同様のこと少し纏めました。BAZEL Google社製ビルダー、GoogleTestとの親和性は最も高いと思われる最後発ビルダーだが発展途上のきらいも若干見え隠れする
売り文句は以下
ビルドとテストを高速化
Bazelは必要なものだけをリビルドします。高度なローカルおよび分散キャッシング、最適化、依存関係分析、および並列実行により、高速な差分ビルドを実現します。1つのツール、複数の言語
Java、C ++、Android、iOS、Go、その他のさまざまな言語プラットフォームをビルドしてテストできます。Bazelは、Windows、macOS、およびLinuxでどうさします。スケーラブル
Bazelは、構造化、コードベース、継続的インテグレーションシステムのスケーリングを助けます。複数のリポジトリまたは巨大なモノリポジトリまで、あらゆるサイズのコードベースを処理します。柔軟にニーズを満たす拡張性
Bazelの拡張言語によって、新しい言語とプラットフォームへの対応を簡単に追加できます。共有、再利用可能な言語とルールが、Bazelコミュニティによって日々発展しています。マニュアル見ると他にもたくさん売り文句が書いていますが
実際に使っていく
インストール方法
curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
sudo apt update && sudo apt install bazel
サンプルプロジェクトのダウンロード
このページの手順に則ってまずはサンプルプロジェクトをダウンロードします。
といっても通常のGitクローンですが
git clone https://github.com/bazelbuild/examples
これを落としてくると、stage1〜3の3つのソースコード環境が落ちてきます。
上記はマニュアルからの転載ですが。examples
└── cpp-tutorial
├──stage1
│ ├── main
│ │ ├── BUILD
│ │ └── hello-world.cc
│ └── WORKSPACE
├──stage2
│ ├── main
│ │ ├── BUILD
│ │ ├── hello-world.cc
│ │ ├── hello-greet.cc
│ │ └── hello-greet.h
│ └── WORKSPACE
└──stage3
├── main
│ ├── BUILD
│ ├── hello-world.cc
│ ├── hello-greet.cc
│ └── hello-greet.h
├── lib
│ ├── BUILD
│ ├── hello-time.cc
│ └── hello-time.h
└── WORKSPACE
stage1〜3それぞれに典型的なプロジェクトの内容と、それぞれをビルドするためのBUILDファイルが格納されています。
stage1
非常にシンプルな例、単一ソースファイルからのコンパイルとバイナリ作成の例。
stage2
複数のソースファイル及びヘッダファイルから、ライブラリを作成し、リンクしてアプリケーション(バイナリ)を作成する例。
stage3
複数のビルドディレクトリとパッケージを作成し、それらをリンクしてメインアプリケーションを作成する例。ビルドする前に
バジルではビルドを行う前に、ワークスペースとパッケージを作成する必要があります。そして、Bazelの説明で使われる用語の意味は以下のとおりです。
ワークスペース
プロジェクトのソースコードやBazelを使ってビルドした成果物を出力するディレクトリのことです。ワークスペースルート(ワークスペースの一番上の階層)には内容が空のWORKSPACEファイルが配置されている必要があり、Bazelはこのファイルを使ってプロジェクトルートを認識します。パッケージ
BUILDファイルを格納したひとまとまりのビルド単位ディレクトリのことをパッケージといいます。BUILDファイルはBazelを使用したビルド手順を定義するファイルで、Bazelに対してプロジェクト内のそれぞれのパーツをどのようにビルドするか指示します。ビルドを実行してみる
まずはstage1のワークスペースに移動します。
ビルドの実行は以下のコマンドを打つだけ。
ここでbazelコマンドのビルドターゲットについている//main:というラベルは、今回使用するBUILDファイルがプロジェクトルートのものであることを表します。
そして、hello-worldはBUILDファイル内で定義されたビルドターゲットの名称です。
ちなみに元のドキュメントでは
実行することが出来れば以下のような表示が行われます。
これが出来れば一通りの手順は成功です。
BUILDファイルの内容など、本筋に当たる部分は次回の記事にて。
cd cpp-tutorial/stage1
ビルドの実行は以下のコマンドを打つだけ。
bazel build //main:hello-world
ここでbazelコマンドのビルドターゲットについている//main:というラベルは、今回使用するBUILDファイルがプロジェクトルートのものであることを表します。
そして、hello-worldはBUILDファイル内で定義されたビルドターゲットの名称です。
ちなみに元のドキュメントでは
INFO: Found 1 target...
Target //main:hello-world up-to-date:
bazel-bin/main/hello-world
INFO: Elapsed time: 2.267s, Critical Path: 0.25s
このような結果が例示されていますが、インストール後の初回起動時は以下のように少しメッセージが冒頭に増えます。bazelのサービスを起動するプロセスが入っているだけなので、特に違いはありません。Extracting Bazel installation... Starting local Bazel server and connecting to it... INFO: Analyzed target //main:hello-world (13 packages loaded, 47 targets configured). INFO: Found 1 target... Target //main:hello-world up-to-date: bazel-bin/main/hello-world INFO: Elapsed time: 20.325s, Critical Path: 0.48s INFO: 2 processes: 2 linux-sandbox. INFO: Build completed successfully, 6 total actionsそして、ビルド成果物の実行は以下です。
bazel-bin/main/hello-world
実行することが出来れば以下のような表示が行われます。
Hello world Thu Mar 5 11:26:30 2020
BUILDファイルの内容など、本筋に当たる部分は次回の記事にて。
0 件のコメント:
コメントを投稿