VSCode에서 C/C++을 사용하려면 별도의 조치가 필요하다. 이 단계들이 조금 번거롭기에, C를 주력으로 사용하는 사람이라면 Visual Studio를 쓰는 것을 권장한다. 설치만 하면 별도의 조치 없이 바로 사용할 수 있으나, 프로그램 조금 무거운 것이 흠이다. 나는 C/C++로 개발할 것도 아니고, 단순 알고리즘 공부 용으로 C를 사용하기 때문에 기존에 사용하던 VSCode를 계속 사용하고 싶었다. (실은 다 필요 없고 vim을 사용해도 되긴 한다. vim 최고(?!)) 서론은 이쯤 하고, 본론으로 들어가겠다.
1. Msys2 설치
우선 위의 웹사이트에 가서 MSYS2를 설치해야 한다.
최소 사양은 64bit Window 7이라고 하니 참고하도록 하자. 파일 크기가 좀 큰지 까는데 시간이 좀 걸렸다. exe 설치 완료 후 실행하자. 실행하면 setup 창이 뜨는데, 딱히 따로 건드려야 하는 것은 없으니 계속 next 만 누르면 된다. Finish를 누른다고 설치가 끝난 것이 아니다. MSYS2 MSYS를 실행하도록 하자. (만약 아무것도 안 건들었다면 자동으로 Msys2가 실행될 것이다.)
그다음 아래의 명령어를 복붙 하자.
pacman -Syu
그럼 설치한다고 여러 문구들이 주르륵 뜰 텐데 Y를 누른 후 계속 진행하면 된다. 중간에 한 번 설치를 위해서 터미널을 종료한다는 문구가 나오는데 Y를 누르면 터미널이 종료된다.
그럼 다시 MSYS2를 실행한 뒤, 설치 완료 후 이제 아래의 명령어를 실행하라.
pacman -Su
이 명령어 또한 문구들이 주르륵 뜨다가 Y/N을 누르라고 뜬다. 역시 Y를 누르고 계속 진행하면 MSYS2 설정은 끝이다.
2. mingw64 설치
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
이제 mingw64를 설치해야 하는데, mingw64 안에 gcc, g++ 등 컴파일러들이 포함되어 있다. 그럼 뭐 여러 가지가 뜨는데 엔터 치면 문구에 나온 것들이 다 설치되는 것이고 숫자들을 골라 입력하면 그것들만 설치된다. 나는 귀찮아서 다 설치했다.
3. 환경 변수 설정
환경 변수의 Path를 수정해야 한다. 우선 시스템 환경 변수 편집에 가자.
시스템 속성의 고급 창이 열릴 것이다. 하단의 환경 변수를 클릭하자.
그럼 아래와 같이 환경 변수가 뜨는데, 시스템 변수의 Path를 선택한 뒤 편집을 클릭해라.
새로 만들기를 클릭한 뒤, msys64의 설치 경로를 복붙 하면 하면 된다. 아까 msys64를 설치할 때 따로 경로 설정을 하지 않았다면 C 드라이브에 설치된다. 각자 msys64의 설치 경로를 찾아 아래와 같이 복붙 하면 된다.
C:\msys64\mingw64\bin
그다음 확인을 눌러 편집창을 끈다. 열려 있는 모든 환경 변수 창을 확인으로 꺼야 한다. 그냥 끄면 변경 사항이 수정되지 않는다. 유의하도록 하자.
설치가 제대로 되었는지 확인하는 방법:
윈도우 + r
을 눌러 cmd 창 열기.
열린 cmd 창에 아래의 명령어 입력.
gcc -v
g++ -v
gdb -v
설치가 정상적으로 되었다면 gcc, g++, gdb의 버전을 출력할 것이고 아니라면 해당 명령어는 실행할 수 없다고 뜬다.
4. VSCode extension 설치
이 extension을 설치한 뒤, 작업하고 있는 c 파일이 있는 폴더를 open folder
로 열라. 그다음 F1
을 눌러 C/C++: Edit Configurations (JSON)
을 클릭해라. 그럼 c_cpp_properties.json
라는 파일이 생성될 것이다. 그 파일을 아래와 같이 수정하라.
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
// msys64 설치 경로에 따라 수정할 것
"C:/msys64/mingw64/include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.18362.0",
// msys64 설치 경로에 따라 수정할 것
"compilerPath": "C:/msys64/mingw64/bin/gcc.exe",
"cStandard": "c11",
"cppStandard": "c++17",
// windows-msvc-x64 에서 아래와 같이 변경
"intelliSenseMode": "windows-gcc-x64"
}
],
"version": 4
}
5. tasks.json
똑같이 F1
을 눌러 Task: Configure Task
-> Create tasks.json file from template
-> Others
선택, 그럼 tasks.json
파일이 생성된다. 그럼 아래와 같이 수정하면 된다.
{
"version": "2.0.0",
"runner": "terminal",
"type": "shell",
"echoCommand": true,
"presentation": {
"reveal": "always"
},
"tasks": [
// c++ compile
{
"label": "save and compile for C++",
"command": "g++",
"args": [
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"group": "build",
"problemMatcher": {
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
// c comile
{
"label": "save and compile for C",
"command": "gcc",
"args": [
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"group": "build",
"problemMatcher": {
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
// 파일 실행
{
"label": "execute",
"command": "cmd",
"group": "test",
"args": [
"/C",
"${fileDirname}\\${fileBasenameNoExtension}"
]
},
// 파일 빌드
{
"type": "cppbuild",
"label": "C/C++: gcc.exe build active file",
"command": "C:\\msys64\\mingw64\\bin\\gcc.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "C:\\msys64\\mingw64\\bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "compiler: C:\\msys64\\mingw64\\bin\\gcc.exe"
}
]
}
6. 단축키 설정 (생략 가능)
편의를 위해 단축키를 변경하는 것이니 이 단계는 따라 하지 않아도 된다.
우선 ctrl+k+s
를 눌러 단축키 설정 창을 열어준다.
빌드 단축키는 ctrl+alt+c
로, 실행은 ctrl+alt+r
로 변경했다. 만약 변경하지 않았다면, 빌드 단축키는 ctrl+shift+b
, 실행은 아마 ctrl+F5
일 것이다. (빌드 단축키는 확실하나, 나는 처음부터 변경한 상태로 사용했기에 실행 단축키가 저것인지는 확실하지 않다. 아마 맞을 것이다.)
이제 파일을 실행해보도록 하자. 만약 실행할 파일이 없다면 *.c
로 끝나는 파일을 생성한 뒤 아래의 코드로 복붙 하라.
#include <stdio.h>
int main(void)
{
printf("Hello World!");
return 0;
}
ctrl+alt+c
를 눌렀더니 정상적으로 파일이 빌드되었다.
그 상태에서 ctrl+alt+r
을 눌렀더니 실행이 바로 뜬다.
엔터를 누르니 제대로 잘 실행되는 것을 볼 수 있다.
7. 디버깅
디버깅을 하려면 launch.json
파일이 필요하다.
Run -> Add Configuration (영문판) / 실행 -> 구성 추가 (한글판)를 클릭, C++ (GDB/LLDB)
-> (c면 gcc, c++이면 g++, 둘 다 사용한다면 g++).exe - Build and debug active file
를 클릭하면 launch.json
파일이 자동으로 아래와 같이 생성된다. (나는 VSCode 언어가 영문이라 사진에 하이라이트 된 부분이 영어로 된 것이고, 만약 언어 설정이 한국어로 되어있다면 저 부분이 한국어로 생성된다. 중요한 것이 아니기 때문에 사진과 다르다고 당황하지 말자. 자동으로 생성된 상태대로 사용하면 된다.)
만약 자동으로 생성이 안된다면 아래의 코드를 복붙한 뒤 경로를 수정하라.
{
// 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": "gcc.exe - Build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "C:\\msys64\\mingw64\\bin", # 각자 msys64\\mingw64\\bin의 경로에 맞게 수정
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe", # 여기도 경로에 맞게 수정
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: gcc.exe build active file"
}
]
}
기본적으로 디버깅 단축키는 F5
이다. 만약 디버깅 단축키를 변경했다면 변경한 단축키를 누르면 된다. (나는 c extension을 사용하기 이전에 디버깅 없이 시작을 F5
, 디버깅 시작을 ctrl+F5
으로 변경했었다는 걸 잠시 까먹고, 계속 F5
누르면서 왜 디버깅이 안되지 이러고 있다가 뒤늦게 바꿨다는 사실이 떠올라 잠시 머리를 쥐어뜯었다.)
후일담
여기까지 진행하느라 고생했다! Visual Studio를 쓰면 훨씬 편하게 코드를 실행하고 디버깅할 수 있는데, 나는 자주 쓰는 IDE가 VSCode라 어쩔 수 없이 이 고생을 했다. 만약 C를 주력으로 사용하는 사람이라면 Visual Studio를 쓰도록 하자.
참고:
1. https://jhnyang.tistory.com/430
2. https://codesyun.tistory.com/89
'Ide 뚝딱뚝딱 > VSCode' 카테고리의 다른 글
[vscode] 잘 쓰고 있는 extension 추천 (1) | 2024.12.17 |
---|---|
[VSCode] ESLint + prettier 사용하기 (0) | 2021.11.13 |
댓글