vscode 로 msvc 2017 로 빌드하는 환경을 구축했다. 이게 의외로 좀 어려워서 아래에 정리한다. 참고한 문서는 https://code.visualstudio.com/docs/cpp/config-msvc이다. 

기본 환경 : 당연한 Visual  Visual Studio 2017 이 설치되어야 한다. 내 경우는 community 버전이다.
vscode 의 경우 확장 Microsoft C/C++ extension 이 설치되어야 한다. ( https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools )

1. batch 파일로 vscode 여는 환경 구축
 visual studio 컴파일러 동작시 여러 환경 변수가 설정되어야 한다. (참고 : https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/compiler-options/how-to-set-environment-variables-for-the-visual-studio-command-line) 이 것을 쉽게 batch 파일로 할 수 있다. 이 파일이 VsDevCmd.bat 이라는 파일이다. 내 경우에는 이 파일이 C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat 에 존재한다. 이 것은 각자 Visual Studio 2017  경로에 따라 다르거나 community 버전 인지 일반 구매 버전인지에 따라 다를 수 있다. 이 파일을 실행하고 나서 vscode 를 실행해야 한다. 이게 프로그램을 실행할 때마다 이렇게 한다는게 참 귀찮다. 따라서 이 것을 미리 batch 파일로 만들어 두면 편한다. 
 내 경우 아래와 같이 만들어 두었다.

call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"  -arch=x64
D:
cd D:\workspace\vscode2\hello_world
code .

-arch=x64 는 64bit 로 환경 설정하기 위해 설정되었다. 이 배치 파일이 C 드라이버이기 때문에 D에 접속 하려는  D: 이라고 필요하다. 그냥 cd 를 하면 접근할 수 없다.  code .  이라는 코드가 vscode 를 현재 디렉토리를 working directory 로 실행하는 명령어 이다. 당연이 hello_world 는 미리 폴더가 만들어 져야 한다.

2. helloworld.cpp
컴파일 하려는 파일은 helloworld.cpo 파일이다.

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{

    vector<string> msg {"Hello", "C++", "World", "from", "VS Code!"};

    for (const string& word : msg)
    {
        cout << word << " ";
    }
    cout << endl;
}



3. vscode 빌드 환경 구축
프로젝트 디렉토리 안의 .vscode 내에 프로젝트별 환경을 설정할 수 있다. 설정해야 하는 파일은 아래와 같다. 

.vscode\c_cpp_properties.json  (compiler path and IntelliSense settings)

{
    "configurations": [
      {
        "name": "Win32",
        "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
        "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe",
        "windowsSdkVersion": "10.0.17763.0",
        "intelliSenseMode": "msvc-x64",
        "cStandard": "c11",
        "cppStandard": "c++17"
      }
    ],
    "version": 4
  }

 

.vscode\tasks.json (build instructions) (실제로 build 하는 command 이다. )

{
    "version": "2.0.0",
    "tasks": [
      {
        "label": "msvc build",
        "type": "shell",
        "command": "cl.exe",
        "args": ["/EHsc", "/Zi", "/Fe:", "helloworld.exe", "helloworld.cpp"],
        "group": {
          "kind": "build",
          "isDefault": true
        },
        "presentation": {
          "reveal": "always"
        },
        "problemMatcher": "$msCompile"
      }
    ]
  }


.vscode\launch.json (debugger settings)

{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "(msvc) Launch",
        "type": "cppvsdbg",
        "request": "launch",
        "program": "${workspaceFolder}/helloworld.exe",
        "args": [],
        "stopAtEntry": true,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "externalConsole": false
      }
    ]
  }

 

4. 빌드하기
빌드를 하려는 위에서 설정한 tasks.json 의 msvc build 를 실행하면 된다. vscode 에서 task 를 실행하는 방법은 ctrl + shift + p  를 누르면 아래와 같은 창이 뜬다. 이 중 "작업: 빌드 작업 실행"을 선택하면 된다. 

여기에서는 가장 첫번째 항목이다.

혹시 이 다음에도 추가로 선택해야 하는 화면이 있다면 cl.exe 를 선택하기 바란다. 

4-1. 빌드 하다가 에러가 발생한다면 보통 batch 파일 설정이 잘못된 것이라는 의심이 든다. 특히 include 경로가 없다고 에러가 발생한다면 더더욱 해당 case 가 의심스럽다.
4-2. cl.exe 가 동작하다가 없다고 에러가 발생했다면 batch 파일 환경에서 cl.exe 가 실행되는지 확인 하기 바란다.

5. 단축키 설정하기
빌드 하는 환경이 단축키가 없어서 너무 불편하다. 이 경우에는 단축키를 설정하도록 한다. vscode 에서 단축키는 프로젝트 별로 설정하는 방법이 없다면 전체 단축키를 설정해야 한다. 
파일 -> 기본설정 -> 바로가기 키  를 누르면 설정할 수 있다. workbench.action.tasks.runTask 를 선택한 후 단축키를 설정할 수 있다. 해당 항목을 더블클릭하고 원하는 대로 단축키를 입력하면 설정할 수 있다. 내 경우에는 ctrl+alt+b  로 설정했다. 이 때 아래 그림에서 붉은 색 부분을 클릭하면 json 으로 수정할 수 있다.

keybindings.json 파일로 프로그램 전체 단축키이다. 

이 때 단순히 task 의 실행뿐만 아니라 task 중에서 특정 task 를 지정해서 실행할 수 있다. 

// 키 바인딩을 이 파일에 넣어서 기본값 재정의auto[]
[
    {
        "key": "ctrl+alt+b",
        "command": "workbench.action.tasks.runTask",
        "args": "msvc build"
    }
]

args 이름이 중요한데, 이 이름으 "msvc build" 로 되어 있다. 위에서 tasks.json 의 label 을 선택할 수 있다. 이 방식을 잘 활용하면 빌드 clean 이라는 task 를 만들고, 단축키로 buld clean 을 만들 수도 있다. 

6. 디버깅 하기
위에서 이미 launch.json 파일을 만들었기 때문에 단축키 F5 를 눌러서 하면된다.



몇가지 추가 설정이 필요할 것 같다. 뭔가 release 버전으로 build 한다던지, 임시파일이나 실행파일이 따로 output 폴더로 지정되어야 한다든지의 작업이 추가로 설정이 필요할 것 같다. 어쩌면 좀 복잡한 프로그램은 그냥, Visual Studio 를 사용하는게 답일지도 모르겠다. gcc 를 이용한 경우 vscode 가 이점이 있을 것 같은데, msvc 라면 그냥 visual studio 가 더 편할 것 같다.