본문 바로가기

VSCode

[VSCode] C++ 빌드 환경 만들기(Window 10)

VSCode로 간단한 C++을 이용한 알고리즘 공부나 해볼까 했다. C++ 플러그인을 설치한다고 해서 바로 빌드가 안되길래 이것저것 검색하며 찾아보니 생각보다 복잡한 과정이 필요하기에 기록을 남긴다.

 

 

먼저 VSCode에서 C/C++ 플러그인을 설치한다.

 

위 플러그인을 설치해야 디버깅이 가능하다. 하지만 플러그인을 설치한다고 빌드가 되는건 아니다.

 

빌드를 위해 Build Tools를 설치해야된다.

이 과정을 진행하기 앞서 말하지만 빌드를 위한 방법은 이 방법말고도 여러가지가 있다. MinGW를 설치하거나 Cygwin을 설치하여 진행하는 방법도 있다. 이 방법들은 이미 작성된 많은 블로그가 있으니 그 것들을 찾아보면 된다.

내가 선택한 방법은 Microsoft에서 제공하는 Build Tools를 사용하는 방법이다.

 

아래 주소로 접속해서 스크롤을 내리면 Build Tools다운로드가 있다. (2020-03-21 기준)

https://visualstudio.microsoft.com/ko/downloads/

 

Windows 및 Mac용 Visual Studio 2019 다운로드

Visual Studio Community, Professional 및 Enterprise를 다운로드하세요. 지금 Visual Studio IDE, Code 또는 Mac을 무료로 사용해 보세요.

visualstudio.microsoft.com

빨간 네모를 다운받아 실행하면 다운로드 창이 뜨고 조금 기다리면 설치한 항목을 선택하는 화면이 뜬다.

 

위 화면처럼 뜰 것인데, 여기서 Visual C++ 빌드 도구를 설치한다.

 

설치가 되었으면 설치 경로를 따로 설정하지 않았고 2019버전을 설치했으면

C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools 이 경로에 설치가 됬을 것이다.

C/C++ 파일을 빌드하는 프로그램은 cl.exe 실행 파일이다. 원활한 빌드를 위해 환경변수의 Path에 경로를 추가해준다.

cl.exe의 경로:

C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64

 

프로젝트를 위한 폴더를 만들고 VSCode를 실행한다.

메뉴에서 File -> Open Folder.. 를 선택하여 프로젝트 폴더를 Open.

 

.cpp 파일이 없으면 cpp 파일을 한 개 생성 후 연다.

cpp 파일이 활성화 된 상태에서 메뉴의 Terminal -> Configure Default Build Task... 선택한다.

 

Terminal -> Configure Default Build Task... 메뉴

위 처럼 cl.exe build active file을 선택. 없으면 VSCode를 완전히 껏다가 다시 실행해보자.

 

그러면 폴더에 .vscode폴더가 생성되고 tasks.json 파일이 생성된다.

기본 tasks.json 파일 내용:

 

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558 
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "cl.exe build active file",
            "command": "cl.exe",
            "args": [
                "/Zi",
                "/EHsc",
                "/Fe:",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "${file}"
            ],
            "problemMatcher": [
                "$msCompile"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

 

만약 환경변수의 Path에 cl.exe 경로를 추가해주지 않았다면 "command" 의 값을 전체 경로로 변경해야 된다.

 

이대로 빌드할 cpp 파일을 선택(중요)하고 Terminal -> Run Build Task... 를 선택하거나 Ctrl+Shift+b 를 눌러 빌드를 실행한다.

 

아마 빌드가 안될 것이다.

iostream이나 string헤더를 코드에 포함시켰다면 헤더를 찾을 수 없다는 Exception이 출력 될 것이다.

헤더 뿐만아니라 추가해야 할 .lib 파일들의 경로를 args에 추가해줘야 된다.

 

필자는 알고리즘 공부를 위해 iostream, vector, string, cstdlib, ctime 등의 헤더를 추가했다. 아래 tasks.json 코드는 이 헤더들과 빌드에 필요한 .lib 파일들의 경로를 포함시킨 코드이다. 혹시 다른 헤더나 .lib파일을 포함해야 된다면, 그 경로 또한 추가해줘야 된다는 것을 기억하자.

 

 

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558 
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "cl.exe build active file",
            "command": "cl.exe",
            "args": [
                "/Zi",
                "/EHsc",
                "/Fe:",
                "${fileDirname}//${fileBasenameNoExtension}.exe",
                "${file}",
                "/I", 
                "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.25.28610/include",
                "/I", 
                "C:/Program Files (x86)/Windows Kits/10/Include/10.0.18362.0/ucrt",
                "/link",
                "/LIBPATH:C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.25.28610/lib/onecore/x64",
                "/LIBPATH:C:/Program Files (x86)/Windows Kits/10/Lib/10.0.18362.0/um/x64",
                "/LIBPATH:C:/Program Files (x86)/Windows Kits/10/Lib/10.0.18362.0/ucrt/x64"
            ],
            "problemMatcher": [
                "$msCompile"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

2020년 3월 21일 기준 최신버전으로 설치한 경로이다. 버전에 따라 경로가 달라지니 무조건 이대로 복사해서 붙여넣지말고 버전이 있는 경로는 수정해주자.

 

위 코드를 보면 알겠지만 "/I" (대문자 i)는 헤더파일 경로

"/link" 다음에는 .lib경로 "/LIBPATH:[Lib 경로]" 를 적어주면 된다.

 

작성 후 저장하고 .cpp 파일을 선택 후 Termial -> Run Build Task... 혹은 Ctrl+Shift+b 를 눌러 빌드를 실행한다.

 

혹시 다시 Exception이 떳는데 Include 경로가 잘못됬다거나 .lib파일을 찾을 수 없다고 한다면 그 파일의 경로를 찾아서 위 처럼 포함시켜서 다시 빌드 해보자.

 

빌드가 완성되었다면 프로젝트 폴더에 .exe 파일이 생겼을 것이다. 터미널에서 실행하면 되는데 이러면 디버깅을 할 수 없다. 디버깅을 위해서 launch.json 파일을 작성하자.

 

.vscode/launch.json 파일을 만들고 파일 내용을 아래처럼 작성

 

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(Windows) 시작",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false
        }
    ]
}

그 후 F5를 누르면 하단의 DEBUG CONSOLE 창에서 프로그램 실행 결과를 확인 할 수 있다.