MS Visual C ++ 2015 обновление 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(); } |
Команды сборки:
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 ./
Итак, вопрос в следующем: Как использовать реализацию модулей VC ++ в CMake?
Нет необходимости использовать бэкэнд MSBuild, ниндзя тоже подойдет.
Я не верю, что кто-то делал какие-либо работы по сборке системы для модулей C ++. Вполне вероятно, что мы (Microsoft) сначала сделаем поддержку MSBuild, но CMake определенно возможен.
Других решений пока нет …