相关疑难解决方法(0)

使用 clang 将 std lib 作为模块导入

我正在尝试使用 clang 中的模块,并希望将标准库包含为模块而不是包含。

目前我这样做

#include <iostream>
#include <string>
Run Code Online (Sandbox Code Playgroud)

看来您在 msvc 中应该能够导入标准库,例如

import std.core;
Run Code Online (Sandbox Code Playgroud)

然而,当使用 clang 时,这似乎没有实现,或者以另一种方式实现。

我的问题是:是否可以像微软建议的那样导入 stl-includes,或者是否可以将标准库包含映射到模块 somhow。

注意:我无法使用的原因#include <...>或者#import <...>是因为其他错误可能会导致其自身问题。所以我认为import std.core如果可能的话,获取或类似是现在要走的路。

ModernesCpp还提到了 std.core。

c++ clang++ c++20 c++-modules

4
推荐指数
2
解决办法
731
查看次数

如何在 CLang C++ 下编译/使用头单元模块?

文档中说 CLang 中的模块支持是部分的。我在最近发布的 LLVM 12.0 中在 Windows 64 位下使用 CLang。

我成功地设法使用了常规模块(您通过 导入import modulename;)。

但我还没有设法创建和使用头单元模块,那些你通过import "header.hpp";. 你能建议如何用例子做到这一点吗?

为了尝试标题单元,我创建了下一个玩具文件:

你好.hpp

#include <vector>
Run Code Online (Sandbox Code Playgroud)

使用.cpp

import "hello.hpp";

int main() {
    std::vector<int> v(123);
}
Run Code Online (Sandbox Code Playgroud)

然后我成功(我希望)将头单元编译hello.hpp成 PCM 文件:

clang++ -std=c++20 -Xclang -emit-header-module -I. hello.hpp -o hello.pcm
Run Code Online (Sandbox Code Playgroud)

命令运行没有错误并产生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
Run Code Online (Sandbox Code Playgroud)

这给了编译错误:

use.cpp:1:8: error: header file "hello.hpp" (aka './hello.hpp') cannot be imported …
Run Code Online (Sandbox Code Playgroud)

c++ clang c++20 c++-modules

4
推荐指数
1
解决办法
301
查看次数

标签 统计

c++ ×2

c++-modules ×2

c++20 ×2

clang ×1

clang++ ×1