Clang および [〜#〜] msvc [〜#〜] は、未完成のC++ 20標準の モジュールTS をすでにサポートしています。 CMakeまたは他のビルドシステムでモジュールベースのプロジェクトをビルドできますか?
私は build2 を試しました、それはモジュールをサポートし、それは非常にうまく機能しますが、依存関係管理について question を持っています(UPD:質問は閉じています)。
モジュールのCmakeサポートを見つけることができませんでした。 clangを使用してモジュールを使用する方法の例を次に示します。私はMacを使用していますが、この例は私のシステムで問題なく動作します。これを理解するのにかなり時間がかかったので、これがLinuxまたはWindows全体でどれほど一般的であるかがわかりません。
Driver.cxxファイル内のソースコード
import hello;
int main() { say_hello("Modules"); }
ファイルhello.cxxのソースコード
#include <iostream>
module hello;
void say_hello(const char *n) {
std::cout << "Hello, " << n << "!" << std::endl;
}
ファイルhello.mxxのソースコード
export module hello;
export void say_hello (const char* name);
上記のソースファイルを使用してコードをコンパイルするには、ターミナルのコマンドラインを次に示します
clang++ \
-std=c++2a \
-fmodules-ts \
--precompile \
-x c++-module \
-Xclang -fmodules-embed-all-files \
-Xclang -fmodules-codegen \
-Xclang -fmodules-debuginfo \
-o hello.pcm hello.mxx
clang++ -std=c++2a -fmodules-ts -o hello.pcm.o -c hello.pcm
clang++ -std=c++2a -fmodules-ts -x c++ -o hello.o \
-fmodule-file=hello.pcm -c hello.cxx
clang++ -std=c++2a -fmodules-ts -x c++ -o driver.o \
-fmodule-file=hello=hello.pcm -c driver.cxx
clang++ -o hello hello.pcm.o driver.o hello.o
そして、次のコンパイルでクリーンスタートを取得する
rm -f *.o
rm -f hello
rm -f hello.pcm
期待される出力
./hello
Hello, Modules!
これがお役に立てば幸いです。