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 으로 수정할 수 있다.
이 때 단순히 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 가 더 편할 것 같다.