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.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も問題ありません。
したがって、適切なOUTPUTとDEPENDS部分を持つ 'add_custom_command'コマンドを、' add_custom_target'(あるいは事前に作成されたオブジェクトファイルを使うことができる 'add_executable')と組み合わせることはどうですか?または**自動**モジュール間の依存関係を解決したいですか? – Tsyvarev
CLangのように見えるのは、GCCではなく選択肢のツールチェインである必要があります。 http://stackoverflow.com/questions/33307657/how-do-i-use-modules-in-clang少なくとも、私はC++モジュールのGCCサポートに関する記述は見つかりませんでした。 –