2016-02-05 4 views
7

MS Visual C++ 2015更新1 implements the Modules proposal。ここでCMakeでVC++モジュールを使用する方法

は、それがどのように動作するかの例です:
出典:

// 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 

各モジュールが持つ1 file.ixxを持っていますその輸出。
このファイルはModuleName.ifcfile.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も問題ありません。

+0

したがって、適切なOUTPUTとDEPENDS部分を持つ 'add_custom_command'コマンドを、' add_custom_target'(あるいは事前に作成されたオブジェクトファイルを使うことができる 'add_executable')と組み合わせることはどうですか?または**自動**モジュール間の依存関係を解決したいですか? – Tsyvarev

+1

CLangのように見えるのは、GCCではなく選択肢のツールチェインである必要があります。 http://stackoverflow.com/questions/33307657/how-do-i-use-modules-in-clang少なくとも、私はC++モジュールのGCCサポートに関する記述は見つかりませんでした。 –

答えて

0

現時点では、誰もC++モジュールのビルドシステム作業を行っていないと思います。 MSBuildのサポートを最初に行うのはMicrosoftだろうが、CMakeは可能性が高い。

+1

[build2](https://build2.org/)はモジュールをサポートしています。 –

関連する問題