ドキュメントでは、CLang でのモジュールのサポートは部分的であると言われています。LLVM 12.0 の最近のリリースから Windows 64 ビットで CLang を使用しています。
通常のモジュールを使用することに成功しました(を介してインポートしますimport modulename;
)。
しかし、ヘッダー ユニット モジュールを作成して使用することはできませんでしたimport "header.hpp";
。例でそれを行う方法を提案できますか?
ヘッダー ユニットを試すために、次のおもちゃのファイルを作成しました。
こんにちは.hpp :
#include <vector>
use.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 because it is not known to be a header unit
import "hello.hpp";
^
MSVC では、通常のモジュールとヘッダー ユニット モジュールを使用することに成功しました。しかし、CLang ではありません。それを手伝ってもらえますか?または、CLang ヘッダー ユニットがまだサポートされていない可能性があることを教えてください。