3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

たった5分でできる!Bazelを使ってHello World.ccをビルドする方法

Last updated at Posted at 2024-09-11

Google生まれの優等生なビルドツール
速く、きれいに、どの言語でも

Bazelは、Googleが開発したビルドツールで、大規模なプロジェクトでも高速かつ再現性のあるビルドを実現します。

具体的には以下の特徴があります。

  • 多言語・マルチプラットフォーム対応
  • 高速で並列ビルドが可能
  • クリーンなビルド(ディレクトリを汚染しない)
  • 人が読める高レベルのビルド言語

今回はこんな素敵なツール、Bazelを使って簡単なC++プログラムをビルドする方法を紹介します。

1. Bazelのインストール

まず、Bazelをインストールします。macOSの場合は以下のコマンドでインストールできます:

brew install bazel

Ubuntuの場合は、公式ドキュメントを参照してください。

2. プロジェクト構造の作成

以下のような構造でプロジェクトを作成します:

WORKSPACE
main/
├── BUILD
└── hello-world.cc

3. WORKSPACEファイルの作成

ルートディレクトリにWORKSPACEファイルを作成し、以下の内容を記述します:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "aspect_gcc_toolchain",
    sha256 = "3341394b1376fb96a87ac3ca01c582f7f18e7dc5e16e8cf40880a31dd7ac0e1e",
    strip_prefix = "gcc-toolchain-0.4.2",
    urls = [
        "https://github.com/aspect-build/gcc-toolchain/archive/refs/tags/0.4.2.tar.gz",
    ],
)

load("@aspect_gcc_toolchain//toolchain:repositories.bzl", "gcc_toolchain_dependencies")

gcc_toolchain_dependencies()

load("@aspect_gcc_toolchain//toolchain:defs.bzl", "gcc_register_toolchain", "ARCHS")

gcc_register_toolchain(
    name = "gcc_toolchain_x86_64",
    target_arch = ARCHS.x86_64,
)

4. ソースコードの作成

main/hello-world.ccファイルを作成し、以下のコードを記述します:

#include <ctime>
#include <string>
#include <iostream>

std::string get_greet(const std::string& who) {
  return "Hello " + who;
}

void print_localtime() {
  std::time_t result = std::time(nullptr);
  std::cout << std::asctime(std::localtime(&result));
}

int main(int argc, char** argv) {
  std::string who = "world";
  if (argc > 1) {
    who = argv[1];
  }
  std::cout << get_greet(who) << std::endl;
  print_localtime();
  return 0;
}

5. BUILDファイルの作成

main/BUILDファイルを作成し、以下の内容を記述します:

load("@rules_cc//cc:defs.bzl", "cc_binary")

cc_binary(
    name = "hello-world",
    srcs = ["hello-world.cc"],
)

6. ビルドと実行

以下のコマンドでプログラムをビルドします:

bazel build //main:hello-world

ビルドが成功したら、以下のコマンドで実行できます:

./bazel-bin/main/hello-world meithon

出力例:

Hello meithon
Wed Sep 11 21:03:22 2024

以上で、Bazelを使ってC++プログラムをビルドする方法を紹介しました。簡単でしたね!

What's next ✨

Bazelを使って他の言語のプログラムをビルドする方法も同じようにできます。公式ドキュメントを参照することで、TypeScriptやGo、Rustなどの言語での使用方法も学ぶことができます。

また、Bazelを使ったビルドの高速化や便利な機能なども公式ドキュメントで紹介されています。さらに詳しく知りたい方は以下のページを参照してください


実際のプロジェクトにおける、Bazelの活用方法などもあれば記事にしていきたいと思います!

ここまで読んでいただき、ありがとうございます。
いいねやシェアはとても励みになりますので、ぜひ宜しくお願いいたします!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?