C++ Modules 体验

环境

clang version 9.0.0 (tags/RELEASE_900/final 372316)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

代码

hello.mxx

export module hello;
export void hello();

hello.cxx

#include <iostream>

module hello;

void hello()
{
  std::cout << "hello C++ Modules!\n";
}

main.cxx

import hello;

int main()
{
  hello();
}

Makefile

CC=clang++ -std=c++2a -fmodules-ts
FLAG=-stdlib=libc++

hello: hello.pcm.o hello.o main.o
        $(CC) $(FLAG) -o $@ hello.pcm.o main.o hello.o

main.o: main.cxx hello.pcm
        $(CC) $(FLAG) -x c++ -o $@ -fmodule-file=hello=hello.pcm -c main.cxx

hello.o: hello.pcm hello.cxx
        $(CC) $(FLAG) -x c++ -o $@ -fmodule-file=hello.pcm -c hello.cxx

hello.pcm.o: hello.pcm
        $(CC) -o $@ -c hello.pcm

hello.pcm: hello.mxx
        $(CC) $(FLAG) --precompile -x c++-module -o $@ hello.mxx

clean:
        rm -f *.o *.pcm hello

结果

c   modules.png

目前还不太行,即使是libc++也没有直接能用的std.io,所以不得不#include <iostream>,而且编译太复杂了。

参考