MS Visual C++ 2015 Update 1では、モジュールの提案が実装されています。
これがどのように機能するかの例です:
ソース:
// c.ixx | // b.ixx | // a.cpp
module GM; | import GM; | import FM;
export void g() {} | module FM; | int main() { f(); }
| export void f() { g(); } |
ビルド コマンド:
set CL=/EHsc /experimental:module # Default flags for cl.exe
cl.exe /c c.ixx # Produces c.obj, GM.ifc
cl.exe /c b.ixx # Depends on GM.ifc, produces b.obj, FM.ifc
cl.exe /c a.cpp # Depends on FM.ifc, produces a.obj
link.exe a.obj b.obj c.obj # Produces a.exe
依存関係グラフ:
c.ixx → GM.ifc → b.ixx → FM.ifc → a.cpp
↘ ↓ ↙
c.obj b.obj a.obj
↘ ↓ ↙
a.exe
各モジュールにはfile.ixx
、そのエクスポートを含む 1 つがあります。
このファイルは と にコンパイルされModuleName.ifc
ますfile.obj
。
M
ファイルがモジュールをインポートする場合、ファイルM.ifc
が存在する必要があります。
デフォルトでは、cl.exe は.ifc
現在のディレクトリ内のファイルを検索しますが、明示的な名前または検索パスを指定することができます。
cl.exe /c a.cpp
-- or --
cl.exe /c a.cpp /module:reference FM.ifc
-- or --
cl.exe /c a.cpp /module:search ./
したがって、問題は次のとおりです。 CMake でモジュールの VC++ 実装を使用する方法は?
MSBuild バックエンドを使用する必要はありません。Ninja も問題ありません。