gpt4 book ai didi

c++ - Clang 和 C++ 模块 TS

转载 作者:太空狗 更新时间:2023-10-29 22:56:08 33 4
gpt4 key购买 nike

我很难让模块 ts 在 clang 上工作(都随 Xcode 9.3 beta 和最新的 7.0.0 trunk 一起提供)。我在这里和其他平台上查看了其他答案,但我仍然无法弄清楚。这是我目前所拥有的:

main.cpp

#include <iostream>
import stuff;

int main() {
std::cout << whatever() << "\n";
}

模块.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 中设置它,那就更好了。

免责声明:我对使用模块映射和传统包含的解决方案不感兴趣。我对模块的兴趣不在于改进编译时间,而在于正确模块化我的代码(尤其是模板代码)。现在我所有的代码都在头文件中,大部分函数都声明为静态的。

最佳答案

事实证明,还需要编译预编译模块文件,方法是将其编译为目标文件然后链接该文件,或者通过快捷方式:

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

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

也就是说,有很多事情仍然让我感到困惑。例如,always_inlinenoinline 等属性似乎不受尊重。编译器会在优化开启时内联函数。

关于c++ - Clang 和 C++ 模块 TS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48993508/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com