截至本次提交,Clang 为Modules TS提供实验性支持。
让我们使用与VS 博客文章中关于实验模块支持的相同示例文件(稍作改动) 。
首先,定义模块接口文件。默认情况下,Clang 将带有cppm
扩展名(和其他一些)的文件识别为 C++ 模块接口文件。
// file: foo.cppm
export module M;
export int f(int x)
{
return 2 + x;
}
export double g(double y, int z)
{
return y * z;
}
请注意,模块接口声明必须是export module M;
而不是module M;
像 VS 博客文章中那样。
然后按如下方式使用模块:
// file: bar.cpp
import M;
int main()
{
f(5);
g(0.0, 1);
return 0;
}
foo.cppm
现在,使用预编译模块
clang++ -fmodules-ts --precompile foo.cppm -o M.pcm
或者,如果模块接口扩展不是cppm
(比方说ixx
,与 VS 一样),您可以使用:
clang++ -fmodules-ts --precompile -x c++-module foo.ixx -o M.pcm
然后构建程序
clang++ -fmodules-ts -c M.pcm -o M.o
clang++ -fmodules-ts -fprebuilt-module-path=. M.o bar.cpp
或者,如果 pcm 文件名与模块名不同,则必须使用:
clang++ -fmodules-ts -fmodule-file=M.pcm bar.cpp
我已经使用r303050 构建(2017 年 5 月 15 日)在 Windows 上测试了这些命令。
注意:使用该-fprebuilt-module-path=.
选项时,我收到警告:
clang++.exe:警告:编译期间未使用的参数:'-fprebuilt-module-path=.' [-Wunused-command-line-argument]
这似乎是不正确的,因为没有该选项,M
找不到该模块。