問題タブ [c++-modules]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - カスタムルールを使用して bazel で C++20 モジュールを使用することは可能ですか?
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
)
基本モジュールを書く
モジュールを使用する
パーツをビルド システムに統合する
c++ - C++ モジュールの 2 段階コンパイル?
Clang と GCC (そしておそらく MSVC?) は、現在、モジュールの実装に 2 段階のコンパイルを使用しています。
- BMI/CMI (MSVC の IPR、まだこれを行う場合は?) を生成して、他の誰かのインポートによって消費されます。
- リンカにフィードするオブジェクト ファイルを生成します。
BMI/CMI を生成するがオブジェクト ファイルを生成しないモジュールには、いくつかの用途があるようです。たとえば、条件付きコンパイルに使用される型または constexpr 変数のみをエクスポートするモジュールです。
標準から理解できる限り、オブジェクトファイルを作成/リンクする必要があるとは言っていません。ですから、このようなモジュールの使用について明らかな何かを見落としているのではないかと考えています。また、ツールがこの「モジュールとしてビルドし、オブジェクトとしてビルドしない」ワークフローをサポートすることを期待している場合はどうでしょうか?