Clang and C++ Module TS

Clang and C++ Module TS

本文关键字:TS Module C++ and Clang      更新时间:2023-10-16

我很难在Clang上获得模块工作(均为Xcode 9.3 Beta和最新的7.0.0 TRUNK提供(。我在这里和其他平台上都检查了其他答案,但我仍然无法弄清楚。这是我到目前为止所拥有的:

main.cpp

#include <iostream>
import stuff;
int main() {
  std::cout << whatever() << "n";
}

模块

export module stuff;
export int whatever() {
  return 5;
}

按照各种建议,我做到了:

clang -fmodules-ts -std=c++17 --precompile -o stuff.pcm module.cppm 
clang -fmodules-ts -std=c++17 -fmodule-file=stuff.pcm main.cpp

这会导致链接器错误(whatever() not found(。我不确定如何在这里进行。

注意:我尝试了-fprebuilt-module-path=.,而不是-fmodule-file,然后抱怨未知模块。

如果有人可以告诉我如何在Xcode中进行设置,甚至更好。

免责声明:我对使用模块地图和传统包含的解决方案不感兴趣。我对模块的兴趣不是要改善编译时间,而是正确地模块化我的代码(尤其是模板代码(。现在,我所有的代码都在标题文件中,无论如何,大多数函数称为静态。

事实证明,要么通过将其编译到对象文件然后链接该文件或通过快捷方式来编译预编译的模块文件:

clang++ -fmodules-ts -std=c++17 -o main -fmodule-file=module.pcm  main.cpp module.pcm

我猜这是有道理的(如果将模块视为AST转储,则只是另一种源文件(。我还发现,如果模块的名称和模块文件的名称相同,则可以使用-fprebuilt-module-path=.选项而不是指定-fmodule-file

也就是说,还有很多事情仍然使我感到困惑。例如,诸如always_inlinenoinline之类的属性似乎并没有受到尊重。编译器将在优化时内联功能。