Clang和C ++模块TS

By simon at 2018-02-28 • 0人收藏 • 54人看过

我很难让模块在叮当声中工作(两者都与Xcode一起提供) 9.3测试版和最新的7.0.0中继线)。我查了一下呃在这里和之后回答 其他平台,但我仍然无法弄清楚。这是我到目前为止:

main.cpp

#include <iostream>
import stuff;

int main() {
  std::cout << whatever() << "\n";
}
## module.cppm
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中设置它,甚至更好。 免责声明:我对soluti不感兴趣使用模块映射和 传统包括。我对模块的兴趣不在于改进编译 时间但关于正确的国防部ularising我的代码(特别是模板代码)。 现在我所有的代码都在头文件中,而且大多数函数都是 十二月像静态一样。

1 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

事实证明,还需要编译预编译的模块文件, 通过编译它到一个目标文件然后li通过该文件或通过 捷径:

clang++ -fmodules-ts -std=c++17 -o main -fmodule-file=module.pcm  main.cpp module.pcm
我想这是有道理的(如果将模块视为AST转储,并因此 只是另一种源文件)。我也发现可以使用 -fprebuilt-module-path=.选项,而不是如果指定-fmodule-file选项的名字 模块和模块文件的名称是相同的。 也就是说,有很多事情仍然让我感到困惑。例如, 像always_inline或noinline这样的属性似乎不被尊重。 编译器将内联函数尽量优化。

登录后方可回帖

Loading...