ClangでC++ Modulesを試したときのメモ
以下の記事を読んだので、試してみた。
使用した Clangのバージョンは以下の通り。
clang version 9.0.0 (https://git.llvm.org/git/clang.git 962a041dca1359c3c47cd8c242fa5d66028f666e)
まずはコードを用意。
// speech.cppm export module speech; export const char* get_phrase() { return "Hello, world!"; }
// main.cpp import speech; //import <iostream>; #include <iostream> int main() { std::cout << get_phrase() << '\n'; }
import <header>; はまだ対応していないみたいなので、普通にincludeした。コンパイルと実行。
$ clang++ -fmodules-ts --precompile speech.cppm $ clang++ -fmodules-ts -fprebuilt-module-path=. speech.pcm main.cpp $ ./a.out Hello, world!
動いた。-fprebuilt-module-pathはプリコンパイルされたモジュールファイルが置かれているディレクトリを指定。
プリコンパイル前のモジュールファイルの拡張子が .cppm でない場合は、以下のように -x c++-module を付ければよいらしい。
$ clang++ -fmodules-ts -x c++-module --precompile speech.cpp $ clang++ -fmodules-ts -fprebuilt-module-path=. speech.pcm main.cpp
また、プリコンパイルされたモジュールファイルの名前と、モジュール名が同じでない場合は -fmodule-file=[モジュール名]=[モジュールファイル]で指定すると通った。
$ clang++ -fmodules-ts --precompile speech_module.cppm $ clang++ -fmodules-ts -fprebuilt-module-path=. -fmodule-file=speech=speech_module.pcm speech_module.pcm main.cpp
上記の記事にあった Modules Paritions は動かなかった。(Modules TSには含まれていない?)
参考: