업데이트:

C++ Modules Test Example (g++)

C++20 Modules

C++20 에 추가된 모듈 Modules 기능은 기존의 header files 의 #include 로 인한 컴파일 시간 증가 이슈 및 필요한 로직(함수, 심볼)만을 내보내기(export)를 통해서 타 언어의 단위 모듈 처럼 효율적인 라이브러리 관리 목적

일종의 pch(precompiled header)의 기능을 포함한 표준적인 모듈 관리 기능

현재 컴파일러마다 (msvc, g++, clang) Standard Library의 지원과 모듈을 사용하기위한 방법이 약간 상이함

GCC (G++) 기준 테스트

GCC (G++) 11 설치

  • gcc 11 이상 버전 필요 (ubuntu)
$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo apt-get update

$ sudo apt-get install gcc-11 g++-11

Standard Library 사용

GCC 사용

  • g++의 경우 수동으로 표준 라이브러리의 map 파일을 생성 해줘야 함
    • g++ -std=c++20 -fmodules-ts -xc++-system-header iostream
    • gcm.cache 디렉토리 생성 및 gcm 파일 생성을 해줌
$ g++ -std=c++20 -fmodules-ts -xc++-system-header iostream
$ g++ -std=c++20 -fmodules-ts -xc++-system-header string

$ tree gcm.cache
gcm.cache
└── usr
    └── include
        └── c++
            └── 11
                ├── iostream.gcm
                └── string.gcm

Standard Library 사용 Example

  • imort module
    • #includeimport 로 변경 및 ; 세미콜론 마무리
import <iostream>;
import <string>;
using namespace std;

int main()
{
	auto s = "modules string"s;
	cout << s << endl;
}
  • build
$ g++ -std=c++20 -fmodules-ts -o main main.cpp
$ ./main
modules string

모듈 작성 및 사용 Example

// adder.cpp
export module adder;

export template <typename Ty>
Ty add(Ty n1, Ty n2)
{
	return n1 + n2;
}

// main.cpp
import <iostream>;
import <string>;
using namespace std;

import adder;

int main()
{
	auto r = add("one "s, "two"s);
	cout << r << endl;
}
$ g++ -std=c++20 -fmodules-ts -O2 -c adder.cpp
$ tree gcm.cache
gcm.cache
├── adder.gcm
└── usr
    └── include
        └── c++
            └── 11
                ├── iostream.gcm
                └── string.gcm

$ g++ -std=c++20 -fmodules-ts -O2 -o main main.cpp adder.o

$ ./main
one - two

댓글남기기