如何在CMake中使用VC++模块

Aby*_*byx 7 c++ cmake visual-c++ c++-modules

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(); }   | 
Run Code Online (Sandbox Code Playgroud)

构建命令:

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
Run Code Online (Sandbox Code Playgroud)

依赖图:

c.ixx ? GM.ifc ? b.ixx ? FM.ifc ? a.cpp
     ?            ?             ?
       c.obj     b.obj    a.obj
            ?     ?      ?
                 a.exe
Run Code Online (Sandbox Code Playgroud)

每个模块都有一个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 ./
Run Code Online (Sandbox Code Playgroud)

所以,问题是:如何在CMake中使用模块的VC++实现
没有必要使用MSBuild后端,Ninja也没关系.

apa*_*doe 0

我不相信目前有人为 C++ 模块做过任何构建系统工作。我们(微软)很可能会首先提供 MSBuild 支持,但 CMake 绝对是可能的。