我正在尝试使用 clang 中的模块,并希望将标准库包含为模块而不是包含。
目前我这样做
#include <iostream>
#include <string>
看来您在 msvc 中应该能够导入标准库,例如
import std.core;
然而,当使用 clang 时,这似乎没有实现,或者以另一种方式实现。
我的问题是:是否可以像微软建议的那样导入 stl-includes,或者是否可以将标准库包含映射到模块 somhow。
注意:我无法使用的原因#include <...>或者#import <...>是因为其他错误可能会导致其自身问题。所以我认为import std.core如果可能的话,获取或类似是现在要走的路。
ModernesCpp还提到了 std.core。
文档中说 CLang 中的模块支持是部分的。我在最近发布的 LLVM 12.0 中在 Windows 64 位下使用 CLang。
我成功地设法使用了常规模块(您通过 导入import modulename;)。
但我还没有设法创建和使用头单元模块,那些你通过import "header.hpp";. 你能建议如何用例子做到这一点吗?
为了尝试标题单元,我创建了下一个玩具文件:
你好.hpp:
#include <vector>
使用.cpp:
import "hello.hpp";
int main() {
    std::vector<int> v(123);
}
然后我成功(我希望)将头单元编译hello.hpp成 PCM 文件:
clang++ -std=c++20 -Xclang -emit-header-module -I. hello.hpp -o hello.pcm
命令运行没有错误并产生hello.pcm. 如果您在没有-o标志的情况下运行上面的命令,hello.hpp.gch则会创建文件
。
然后我尝试编译use.cpp,但没有成功,不知何故它无法识别我的头单元和/或找不到相应的hello.pcm. 我想我错过了一些特殊的标志,这些标志表明编译器是头单元。使用了下一个命令:
clang++ -std=c++20 -fprebuilt-module-path=. -fmodule-file=hello.hpp=hello.pcm -I. use.cpp
这给了编译错误:
use.cpp:1:8: error: header file "hello.hpp" (aka './hello.hpp') cannot be imported …