Visual Studio 2019에서 C++20 헤더 단위 사용하기
모듈 기능과 함께 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)"로 선택해야 합니다.
2. 모듈 기능 활성화
그리고 헤더 단위는 모듈 기능의 일부이므로, 헤더 단위를 사용하려면 모듈 기능을 활성화해야 합니다.[2] 프로젝트 속성 페이지에서 구성 속성 > C/C++ > 언어의 실험용 C++ 표준 라이브러리 모듈 사용을 "예(/experimental:module)"로 선택하면 됩니다.
3. 헤더 단위 기능 활성화
마지막으로, 헤더 단위 기능 자체도 따로 활성화해 주어야 합니다. 프로젝트 속성 페이지에서 구성 속성 > C/C++ > 언어 > 고급의 컴파일 옵션을 "C++ 헤더 단위로 컴파일(/exportHeader)"로 선택하면 됩니다.
이것으로 끝입니다. 이제 프로젝트를 빌드하면 별문제 없이 실행 파일이 만들어질 것입니다.