Visual Studio 2019에서 C++20 헤더 단위 사용하기

류광, 2021/08/21 19:21
모듈 기능과 함께 C++20에 추가된 '헤더 단위' 기능을 Visual Studio 2019에서 사용하는 방법.

C++20의 헤더 단위(header unit)는 통상적인 C++ 헤더를 모듈처럼 사용하는 기능입니다. #include 기반 소스 코드 조직화에서 모듈 기반 소스 코드 조직화로 넘어가는 과도기적인 단계를 위한 기능이라고 생각하면 되겠습니다.

이 글에서는 간단한 예제 프로젝트를 통해서, Visual Studio 2019에서 헤더 단위 기능을 사용하는 방법을 살펴봅니다. 목표는 다음과 같은 C++ 프로그램을 성공적으로 빌드해서 실행하는 것입니다.

// main.cpp
#include <iostream>
import <vector>;      // (1)
import "myheader.h";  // (2)

int main() {
    std::vector vec{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    std::cout << "get_size(vec): " << get_size(vec) << "\n";
}

이 프로그램이 포함시키는 myheader.h는 함수 템플릿 하나를 담은 평범한 C++ 헤더입니다.

// myheader.h
#pragma once
auto get_size(auto obj) { return obj.size(); }

main.cpp로 돌아가서, (1)에서는 표준 헤더 <vector>import를 이용해서1 현재 범위에 도입(import)합니다( #include를 이용해서 현재 범위에 '포함'시키는 것이 아니라). 이처럼 표준 헤더를 import를 이용해서 모듈로서 도입하는 것은 헤더 단위의 두 가지 용법 중 하나입니다.

(2)에서는 사용자 정의 "myheader.h"를 역시 import를 이용해서 도입합니다. 이것이 헤더 단위의 또 다른 용법입니다.

그럼 VS 2019에서 이 프로그램을 빌드하는 데 필요한 설정들을 살펴봅시다. VS 2019에서 콘솔 앱 프로젝트를 만들고 이 두 파일을 프로젝트에 추가했다고 가정합니다.

주의: 아래 내용은 Microsoft Visual Studio Community 2019 버전 16.10.4를 기준으로 합니다. 이후 버전에서는 옵션 이름이나 적용 방식이 달라질 수 있습니다.

1. C++ 언어 표준 설정

우선, C++20의 기능들을 사용하려면 프로젝트 속성 페이지에서 구성 속성 > C/C++ > 언어C++ 언어 표준 항목을 "미리보기 - 최신 C++ 초안의 기능(/std:c++latest)"로 선택해야 합니다.

C++ 언어 표준 설정

2. 모듈 기능 활성화

그리고 헤더 단위는 모듈 기능의 일부이므로, 헤더 단위를 사용하려면 모듈 기능을 활성화해야 합니다.2 프로젝트 속성 페이지에서 구성 속성 > C/C++ > 언어실험용 C++ 표준 라이브러리 모듈 사용을 "예(/experimental:module)"로 선택하면 됩니다.

모듈 기능 활성화

3. 헤더 단위 기능 활성화

마지막으로, 헤더 단위 기능 자체도 따로 활성화해 주어야 합니다. 프로젝트 속성 페이지에서 구성 속성 > C/C++ > 언어 > 고급컴파일 옵션을 "C++ 헤더 단위로 컴파일(/exportHeader)"로 선택하면 됩니다.

헤더 단위 활성화

이것으로 끝입니다. 이제 프로젝트를 빌드하면 별문제 없이 실행 파일이 만들어질 것입니다.


  1. #include <vector>는 C++ 문장이 아니라 전처리기 지시문이라서 세미콜론이 붙이지 않지만, import <vector>는 C++ 문장이라서 반드시 세미콜론을 붙여야 합니다. 

  2. 모듈은 아직 실험적인 단계라서 현재는 개별적으로 활성화해 주어야 하는데, 나중에는 C++ 언어 표준 설정에 따라 자동으로 적용되는 쪽으로 바뀔 것입니다. 3번 헤더 단위 활성화도 마찬가지고요. 

top
의견 # + 0

Trackback Address :: http://occamsrazr.net/tt/trackback/373

comments powered by Disqus

(2013년 11월 10일자로 블로그에도 DISQUS 시스템을 도입했습니다. 기존 의견의 수정, 삭제, 댓글 추가는 여전히 가능합니다.)


◀ PREV : [1] : [2] : [3] : [4] : [5] : [6] : [7] : [8] : ... [348] : NEXT ▶