7

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 も問題ありません。

4

1 に答える 1