Bazel はモジュールを直接サポートしていません ( Issue #4005を参照)。
ただし、バゼルにカスタムCROSSTOOLを提供することは可能です。
https://docs.bazel.build/versions/0.22.0/crosstool-reference.htmlから:
デフォルトでは、Bazel はビルド用に CROSSTOOL を自動的に構成しますが、手動で構成するオプションがあります。
また、カスタム ルールを使用して bazel を拡張することもできます。
https://docs.bazel.build/versions/master/skylark/rules.htmlから:
Bazel 自体にはいくつかのルールが組み込まれています。cc_library や java_binary などのこれらのネイティブ ルールは、特定の言語のコア サポートを提供します。独自のルールを定義することで、Bazel がネイティブでサポートしていない言語やツールに対して同様のサポートを追加できます。
また、Bazel のモジュールの問題に関するこのコメントは、カスタム CROSSTOOL を使用して、ネイティブ サポートがなくてもモジュールをサポートできることを示唆しています。
モジュールに関するすべて (clang のみ) は、すでにオープン ソース化されています。唯一欠けているのは、それらを利用して必要なすべての機能を提供する CROSSTOOL です。
誰かがclang用のカスタムCROSSTOOLを書く方法と、それを使ってモジュール用のカスタムC++ルールを書く方法を示すことができますか(例cc_module
)
基本モジュールを書く
// helloworld.cc
module;
#include <stdio.h>
export module helloworld;
export void hello();
module :private;
void hello() { puts("Hello world!"); }
モジュールを使用する
// main.cc
import helloworld;
int main() { hello(); }
パーツをビルド システムに統合する
cc_module(
name = "helloworld",
srcs = ["helloworld.cc"],
) # Compiles to a precomiled module file (PCM)
cc_binary(
name = "main",
srcs = [
"main.cc",
],
deps = [
":helloworld",
],
) # Compiles against the helloworld PCM