2016-02-05 103 views
7

MS Visual C++ 2015 Update 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 

每個模塊有一個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 ./ 

所以,問題是:如何使用VC++實現的模塊中的CMake
沒必要使用MSBuild後端,忍者也很好。

+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至少我還沒有找到任何提及GCC對C++模塊的支持。 –

回答

0

我不相信任何人目前都在爲C++模塊完成任何構建系統工作。很可能我們(微軟)會先做MSBuild支持,但CMake肯定是可能的。

+1

[build2](https://build2.org/)支持模塊。 –