MS Visual C ++ 2015 Update 1 implements the Modules proposal。
这是一个如何运作的例子:
来源:
// 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
及其出口
此文件将编译为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也没关系。
答案 0 :(得分:0)
我认为目前没有人为C ++模块做过任何构建系统工作。我们(微软)可能会首先支持MSBuild,但CMake肯定是可能的。