[C++][VSCode]VSCode C++ MSVC 연동, 프로젝트 설정(vcpkg, CMake)

Windows + VSCode + MSVC + CMake + vcpkg

달성 목표


  1. Windows 환경에서 VSCode를 통해 C++을 MSVC로 개발(빌드/컴파일/링크)한다.
  2. 어떤 환경에서든 쉽게 개발할 수 있게 vcpkg와 CMake 세팅을 완료한다.

코딩 테스트 연습 때문에 C++ 개발이 필요하다. 요즘 IDE는 계속 VSCode를 쓰고, 집 컴퓨터를 원격 데스크톱으로 붙어서 메인 컴퓨터로 쓰다 보니 그냥 MSVC(VS Community 2022 있음)를 쓰는 게 낫겠다고 생각해서 사용하려 했는데, Windows + VSCode + MSVC는 제대로 정리를 해본 적이 없네. WSL + VSCode + g++, Windows + VSCode + Mingx, Windows + VS 2022 + MSVC 조합은 해봤는데 ㅋㅋㅋㅋ

1. MSVC 설치


Microsoft Visual C++ Compiler.

Visual Studio를 설치하고 C++ 개발을 선택하면 자연스레 설치되는 컴파일러인데, 엄청 무거운 컴파일러 임에는 분명하지만 윈도우 기반의 C++는 뭐 그냥 대체 불가고 컴파일러 성능과 기능들이 워낙 강력하기도 하다. (그냥 Visual Studio 쓰는 게 나을 거 같기도 한데…)

같은 MS 계열이다 보니 연동에 대한 공식 문서가 있어 이를 강력히 참조한다.

Configure Visual Studio Code for Microsoft C++

우선 MSVC가 없으면 Visual Studio를 받아서 C++ 개발을 선택해서 설치하거나,

Visual Studio Tools 다운로드 – Windows, Mac, Linux용 무료 설치 (microsoft.com)

위 링크에서 Tools for Visual Studio under the All Downloads section and select the download for Build Tools for Visual Studio 2022를 설치하면 된다.

2. VSCode 플러그인 설치 – C/C++, C/C++ Extension Pack, CMake


개발하는 데 필요한 Extension들을 설치해 준다.

3.[중요!] Developer Command Prompt에서 VSCode 실행하기!


가장 특이한 부분. 꼭 해당 CMD 프롬프트로 VSCode를 실행해야 MSVC 활용이 가능함.

code [경로]를 입력하면, 해당 경로를 기본으로 한 VSCode가 열린다.

일단 되는지 해보자!

대충 코드를 작성하고 돌려보면 성공적으로 MSVC 컴파일러인 cl.exe에 물려서 프로그램이 실행되는 것을 볼 수 있다!

4.CMake와 vcpkg 만들기


우선 간단 정리

CMake는 플랫폼 별로 makefile을 만들어주는 빌드 도구고 vcpkg는 C++ 라이브러리를 쉽게 설치하게 도와주는 도구다.

대부분의 유명한 오픈소스 라이브러리는 CMake를 통해 크로스 플랫폼을 지원한다. 그래서 이 두 개를 잘 활용하면 어느 플랫폼에서든 돌아가는 C++ 프로그램을 강력한 오픈 소스 라이브러리를 쉽게 설치하고 연동하여 사용할 수 있는 것이다.

이를 적용하는 방법은 Visual Studio Code에서 CMake를 사용하여 패키지 설치 및 사용 | Microsoft Learn의 문서를 강력히 참조한다.

일단 CMake는 Download CMake 여기에서 다운로드해서 설치,

vcpkg는 CMD에서 아래 코드를 실행하여 설치.

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg; .\bootstrap-vcpkg.bat

이제 vcpkg로 필요한 패키지를 추가해볼까?

vcpkg new --application

이걸 수행하면, vcpkg.json, vcpkg-configuration.json이 생성된다. vcpkg.json은 필요한 패키지를 적는 곳이고, vcpkg-configuration.json은 패키지를 가져오는 곳에 대한 정보를 기술한다.

vcpkg add port fmt

fmt 라이브러리를 받아보자. vcpkg는 패키지 단위를 포트라고 부른다.

이제 이를 CMake를 통해서 연동해서 실행해보자.

이를 위해선 프로젝트 루트에 CMakeLists.txt 파일을 생성하고 다음과 같이 입력한다.

cmake_minimum_required(VERSION 3.10)

project(Leetcode)

find_package(fmt CONFIG REQUIRED)

add_executable(HelloWorld main.cpp)

target_link_libraries(HelloWorld PRIVATE fmt::fmt)

이렇게 Makefile like한 코드를 입력하면, 각 플랫폼에 맞는 makefile을 생성하여 프로그램(또는 라이브러리)를 빌드하는 것이다.

위에서 find_package가 바로 vcpkg를 활용하는 부분이다. 근데 뭐 불친절의 끝 C++가 그렇듯 CMake에게도 vcpkg를 어떻게 활용하라고 설정을 우리가 해주어야 한다.

이를 CMake 툴 체인 연동이라고 하는데, CMake에게 CMakePresets.json 파일을 통해 vcpkg 경로 내 존재하는 cmake를 위한 파일 vcpkg.cmake 경로를 알려주면 끝이다.

프리셋을 만들 때는 VSCode의 CMake 플러그인 명령어를 사용하면 scaffold는 쉽게 할 수 있다.

{
    "version": 8,
    "configurePresets": [
      {
        "name": "vcpkg",
        "generator": "Ninja",
        "binaryDir": "${sourceDir}/build",
        "cacheVariables": {
            "CMAKE_BUILD_TYPE": "Debug",
            "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
        }
      }
    ]
  }

위처럼 CMakePresets.json을 프로젝트 루트에 만들어주자. 이를 저장하면 cmake가 바쁘게 움직이는 출력창을 볼 수 있을 것이다.

이게 문제 없이 끝났다면 한번 빌드를 수행해보자. CMake의 빌드는 Ctrl + Shift + p 팔레트를 열어서 CMake : Build(또는 F7)를 수행하면 된다.

그러면 fmt 라이브러리를 받아서 HelloWorld executable에 링킹한 HelloWorld.exe가 만들어 졌을 것이다.

CMake의 디버그 방법은 좀 특이한데 그냥 F5를 하면 안되고, Shft + F5를 해야 CMake에서 빌드한 프로그램의 디버그가 된다.

요약


  1. VSCode를 설치한다. 필요한 플러그인도 설치한다.(cmake, c++)
  2. MSVC를 설치한다.
  3. vcpkg와 CMake를 설치한다.
  4. Developer CMD를 통해 VSCode를 실행한다.
  5. vcpkg add port를 통해 필요한 패키지를 추가한다.
  6. CMakeLists.txt를 통해 원하는 컴파일 동작을 정의한다.
  7. CMake Preset에 vcpkg 툴체인을 정의한다.
  8. CMake를 통해 빌드를 수행한다.

정말 불친절하고 복잡한 C++ 세상. 그래도 이 정도 도구면 진짜 간편 한거다. 슬픈 건 vcpkg에 없는 패키지들도 많다는 거…

다음에는 CMake에 대해 더 자세히 다뤄보겠다.

leetcode/ at main · simon00102/leetcode (github.com)


Posted

in

, ,

by

Tags:

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다