서버기술컬럼

Visual Studio 2017와 VCPKG로 CMake 프로젝트 빌드하기

서론

Windows 플랫폼에서 개발을 하다보면 CMake 기반의 프로젝트를 빌드해서 사용해야 하는 경우가 생기는데, 최근까지 가장 많이 사용했던 방법은 Windows 버전의 CMake 툴을 사용해서 MSBuild 프로젝트 파일을 생성한 후, Visual Studio로 열어서 빌드하는 것이었다.

그러나, Visual Studio 2017 Update에 ‘Visual Studio tools for CMake’ 기능이 추가되고, ‘Open folder(폴더 열기)’ 기능과 연동되면서 CMake 기반의 프로젝트를 Visual Studio로 직접 관리 할 수 있게 되었다.

그러나, 패키지를 빌드하다 보면 대부분의 경우, 외부 라이브러리를 참조하게 되는데 Microsoft에서 배포하는 VCPKG라는 C/C++ 라이브러리 관리자를 이용해서 쉽게 해결 할 수 있다.

이번 칼럼에서는 MariaDB의 C/C++ 커넥터 소스코드를 Visual Studio에서 직접 빌드하는 과정을 통해서 CMake 기반의 프로젝트를 빌드하면서 VCPKG를 이용해서 외부 라이브러리 의존성까지 해결하는 과정을 살펴보겠다.

개발 환경 셋팅

a. Visual Studio 2017 Community Edition – Version 15.5 이상 15.4.4 버전에서는 CMake 파일이 제대로 열리지 않았기 때문에 15.4.5 이상의 VS 버전을 추천.
인스톨러에서 CMake for Visual Studio 2017 선택해서 설치한다.

1

b. VCPKG 설치
서드 파티 라이브러리를 쉽게 설치 및 관리 할 수 있게 만들어 주는 Windows 커맨드 라인 툴로 상당히 많은 수의 라이브러리를 각 빌드 타겟(x86, x64, debug, release)별로 설치 할 수 있어 편리하다.

설치 방법은 https://github.com/Microsoft/vcpkg 에 자세히 나와 있기 때문에 생략하도록 하겠다.

2

까지 실행했다면, 패키지 설치는 하지 말고 다음 단계로 넘어가도록 하자.

CMake 프로젝트 열기

a. 자, 준비가 되었다면 Visual Studio에서 CMake 파일을 열어보자.
Visual Studio 2017에서 CMake 프로젝트를 여는 방법은 두가지가 있는데, 파일 -> 열기 ->            CMake 와 “오픈 폴더” 기능 (파일->열기->폴더) 어느 쪽을 사용해도 상관없다.
단,  파일 -> 열기 -> CMake의 경우는 CMakeCache 파일로부터 CMakeSettings.json 파일을         생성한다는 것을 기억 해 두자.

b. 프로젝트를 열면, Visual Studio는 디폴트 타겟(x86 Debug)에 대한 CMake cache를 생성  한다.
메뉴바에 CMake 메뉴가 생성되고, Solution Explorer에 CMake 프로젝트의 하위 폴더들이 정상적으로 나타났다면 일단 성공이다.
CMake cache를 생성하는 과정이기 때문에 CMake파일에 오류가 있다면, Output 콘솔과 에러 목록에 오류 메시지가 표시된다.

CMakeSettings 수정

a. CMake 파일을 로드하면, Visual Studio는 CMakeSettings 파일을 기본 생성하게 되는데, CMake -> Change CMake Settings -> ${Project name} 를 선택하자.

b. Solution Explorer에 CMakeSettings.json 파일이 나타나면서 에디터 창에 파일 내용이 보이는데, 다음과 같은 Configuration 항목들이 나타날 것이다.

4-b.jpg

몇 가지 항목에 대해서만 간단히 설명하자면,
* name : VS 설정 타겟에 표시되는 이름. (${name}으로 사용 가능)
* generator : CMake 파일을 읽어서 실제 빌드 관련 정보를 생성한다. Ninja로 실패하는 경우, 다른 값으로 변경한다. (${generator}로 사용 가능)
* configurationType : generator가 인식할 수 있는 빌드 타입.
* buildRoot : 빌드 관련 파일들이 생성되는 경로.
* installRoot : 결과물이 생성되는 경로.

c. buildRoot와 installRoot의 기본값이 ${env.USERPROFILE} 아래로 잡혀 있는데, 이 부분을 프로젝트 폴더에 포함하도록 수정 해 보자.4-c

d. 이제, buildRoot 디렉토리와 installRoot 디렉토리는 프로젝트 내에 위치할 것이다.

변경 내용을 저장하면, CMakeCache를 다시 생성하게 되고, 출력 창에서 아래와 같은 메시지를 확인 할 수 있을 것이다.

4-d.jpg

cURL 라이브러리를 찾지 못했다는 내용이지만, 사용하지 않도록 설정이 바뀌고 빌드는 정상적으로 진행되는 상태이다.

VCPKG로 의존 패키지 설치하기

a. VCPKG 디렉토리로 이동해서 cURL 패키지를 설치하고, 이것을 프로젝트에서 참조할 수 있도록 CMakeSettings.json 파일을 한 번 더 수정하자.

5-a.jpg

b. 저장하면, CMakeCache가 갱신되면서 출력 창에서 아래와 같이 cURL 라이브러리를 참조하는 것을 확인 할 수 있다.

5-b.jpg

여전히 찾지 못할 경우에는 CMake -> Cache -> Delete Cache Folders 로 캐시를 삭제 하고, CMake -> Cache -> Generate 를 실행해서 Cache를 다시 생성 해 보자.

빌드하기

a. 메뉴바에서 CMake -> Build All 을 실행하면, 빌드가 진행된다.
* * Debug -> Run 또는 Build 메뉴나 CMakeList.txt 파일에서 우클릭으로 메뉴를 열어서 빌드해도 상관없다.

b. 빌드를 마치고 나면, 의도한 대로 프로젝트 폴더 내에 ‘build’ 및 ‘install’ 폴더가 생성되고 결과물이 위치한 것을 확인 할 수 있다.

6-b

마치며

Linux나 macOS같은 Unix/Linux 계열 운영체제에서는 외부 저장소를 사용하는 패키지 매니저를 사용하는 것이 보편적인데, 윈도우즈에는 Nuget 패키지 매니저가 있지만, Unix/Linux 계열의 패키지 매니저와는 사용 방법에서 이질감이 있다.

VCPKG는 아직 보완할 점이 많은 것도 사실인데, 특히, 설치하려는 패키지 버전을 지정할 수 없는 부분은 특정 버전의 패키지를 사용해야 하는 상황에서는 꽤나 답답한 부분이기도 하다.

그렇지만, 간단한 라이브러리까지도 직접 빌드해야 하는 번거로움을 당장 해결할 수 있으며, 장기적으로는 윈도우즈 시스템 전반에 걸쳐서 C/C++ 라이브러리를 관리하기 위한 툴로 발전할 수도 있다.

그동안 Windows용 바이너리를 제공하지 않는 오픈소스 라이브러리의 사용을 고민했던 사용자라면 직접 빌드해서 사용 해 보는 것은 어떤가.

참고 링크
https://mariadb.com/kb/en/library/building-connectorc-from-source/
https://blogs.msdn.microsoft.com/vcblog/2016/11/16/cmake-support-in-visual-studio-the-visual-studio-2017-rc-update/
https://docs.microsoft.com/en-us/cpp/ide/cmake-tools-for-visual-cpp
https://docs.microsoft.com/en-us/cpp/vcpkg

아이펀팩토리 이재원 테크니컬 디렉터

0 comments on “Visual Studio 2017와 VCPKG로 CMake 프로젝트 빌드하기

답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

w

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: