c언어

Vscode에서 c언어 개발환경 구축하기 - msys2, mingw64

조각레몬 2025. 2. 16. 18:37

c언어를 배워보려고 했는데, 대부분의 책에서는 vscode가 아니라 visual studio를 사용하는 방법을 알려줬다.

하지만 사실 vscode를 지금까지 python 하려고 사용해오고 있었기 때문에 vscode에서 c언어 개발환경을 구축할 수 있는 방법을 찾아보았다.

 

https://veggie-garden.tistory.com/36

 

[Window] VSCode에서 C/C++ 실행 및 디버깅하기

VSCode에서 C/C++을 사용하려면 별도의 조치가 필요하다. 이 단계들이 조금 번거롭기에, C를 주력으로 사용하는 사람이라면 Visual Studio를 쓰는 것을 권장한다. 설치만 하면 별도의 조치 없이 바로 사

veggie-garden.tistory.com

이 글을 참고해보려고 한다.

 

1. MSYS2 다운로드하기

 

위의 Download the installer 옆의 exe 파일을 눌러주면, exe 파일이 다운로드된다.

이렇게 다운로드한 파일을 열어서 계속 Next만 눌러주면 된다.

 

이렇게 다운로드가 다 되면 그대로 Finish를 눌러주면 MSYS2가 자동으로 열린다.

 

흠 근데 내 경우는 UCRT64가 열렸다.

혹시 몰라서 본문에 나와있는대로 MSYS2 MSYS로 열어보려고 한다.

찾아보니까 확실하지 않은 경우는 ucrt 64를 사용하라고 되어 있는데,

그 경우 밑의 path 설정에서 ucrt64로 설정해줘야 하고, 이후의 과정도 조금씩 달라질 것 같아서

일단 MSYS로 열어보고 안되면 다시 설치해봐야할 것 같다.

 

+조금 더 찾아보니까 ucrt64가 조금 더 최신버전인 것 같다.

근데 그래서 그런지 잘 안나와있어소...

그냥 mingw로 했다.

솔직히 지금까지 대부분 사람들이 mingw 사용했을 텐데 별 문제 없을 것 같다.

그리고 이걸 한 5번 도전했는데, ucrt로 하다가 때려치고 이 글대로 하기로 했다.

이 글대로 해도 안되면 ucrt로 다시 갈아타보게따..

출처: https://vuzwa.tistory.com/entry/gcc-gdb-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-msys2%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC-%EC%84%A4%EC%B9%98-MinGW64-32-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

 

2. MSYS2에서 Mingw 다운로드하기

 

왼쪽 사진의 UCRT64 말고 밑에 있는 MSYS2 MSYS로 열어보겠다.

그 후,

pacman -Syu

를 입력해준다.

이런 화면이 뜨면 Y를 눌러준다.

또 한번 더 Y가 뜨는데, 그 때도 Y를 한번 더 눌러주면 된다.

그러면 자동으로 MSYS2가 꺼진다.

다시 MSYS2 MSYS를 실행시켜준 후, 이번에는 아래의 명령어를 입력한다.

pacman -Su

역시나 y를 눌러주었다

뭔가 시간이 조금 걸렸지만 잘 설치 된 것 같았다

 

마지막으로 아래의 명령어를 입력해주면 된다.

pacman -S --needed base-devel mingw-w64-x86_64-toolchain

 

내가 참고한 글에는 확실하게 안 나와있었는데, 다른 글을 보니까 MSYS2에 입력하는게 맞아보였다.

cmd에 입력해야하나 조금 고민했당...

 

그대로 입력하면 이런 화면이 뜨고, Enter을 쳐주면 다 설치된다.

역시나 설치할건지 물어보면 y를 눌러주었다.

다운로드 시간이 조금 오래 걸린다.

 

 

3. 환경변수 설정하기

검색창에 환경 변수 라고 검색하면 나오는

시스템 환경 변수 편집 > 고급 > 환경변수(N) ...

로 들어가준다.

그리고 쭉 내리면 나오는 Path를 누른 후 편집을 눌러준다.

이미 있는 ucrt64는 내가 ucrt64로도 도전해본 흔적이다...ㅠㅠ

 

그리고 새로만들기를 눌러 아래의 경로를 복붙해서 넣는다.

C:\msys64\mingw64\bin

 

아무것도 건드리지 않았다면 이 경로라고 한다.

그리고 친구의 조언을 들어 제일 위로 옮겨줬다.

가장 뭐 우선순위가 높게 열리라고..? 뭐 그랬다고 한다.

그리고 닫을 때는 무조건 '확인'으로 해줘야 한다.

그래야 설정이 된다.

 

잘 다운로드 되었는지 확인하는 방법은

cmd 창에 아래의 명령어를 입력해보는 것이다.

cmd 창은 검색>cmd 입력하면 바로 나온다.

gcc -v
g++ -v
gdb -v

 

각각 하나씩 입력해보면, 잘 깔렸으면 각 버전이 나온다.

나는 gcc랑 g++은 version 14.2.0이라고 나왔고

gdb는 버전이 정확하게 나오진 않은 것 같은데, 16.2라고 나왔다.

일단 확실한건 MSYS로 mingw를 깔기 전에는 이러한 결과가 안 나오고,

안된다고 에러만 떴다.

(사실 ucrt64로 할 때도 계속 이랬다... 다른 글들에서 pacman -Syu만 해도 저게 뜬다고 했는데,

안되길래 그냥 mingw로 갈아탔는데, UCRT64 할 때도 pacman -Su 까지 하고 설치해보면 다를지도 모른다.)

 

4. VScode 설치하기

나는 python 때문에 VScode가 이미 설치되어 있어서 생략

원글도 생략했다.

헤헤

 

5. VScode extension 설치

VScode로 들어가서 왼쪽 위에서 다섯번째 extension을 눌러주고, C/C++부터 차례대로 4개를 전부 깔아줬다.

다른 글에서 보니 bracket pair color도 좋다고 해서 이 친구도 설치해줬다.

Bracket pair color은 대괄호 색깔을 쌍끼리 맞춰줘서 보기 힘든 c언어의 수많은 대괄호를

보기 편하게 만들어준다고 한다.

 

그리고 왼쪽의 제일 첫번째, explorer에서 open folder을 선택해 내가 c언어 파일을 저장할 폴더를 열어주었다.

참고로 폴더 경로의 모든 이름은 영어로 해야한다.

그렇지 않으면 오류가 발생한다.

완전히 새롭게 폴더를 생성해주는 것도 가능했다.

그리고 practice(내 폴더)에 마우스를 가져다대면 나오는 첫번째 아이콘, new file을 클릭해서 main.c라고 입력해주면,

새로운 c 파일이 생긴다.

그리고 이 파일에 가장 기본이 되는 아래의 코드를 적어주었다.

그냥 확인만 하면 돼서 어떤 코드를 적어도 괜찮을 것 같다.

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

 

 

5-1. c_cpp_properties.json

 

그리고 F1을 누르고, C/C++: Edit Configurations (JSON)으로 들어가면 생기는 파일인 c_cpp_properties.json을 아래의 내용으로 바꾸어주었다.

역시나 원글에 있던 그대로이다! (c11 -> c23, c++17 -> c23으로만 바꾸었다. 설치 경로를 수정하라는 건 파일을 확인해보니 그대로 경로에 있길래, 그대로 뒀다.)

{
  "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": "c23",
          "cppStandard": "c++23",
          // windows-msvc-x64 에서 아래와 같이 변경
          "intelliSenseMode": "windows-gcc-x64"
      }
  ],
  "version": 4
}

 

5-2. tasks.json

 

F1 -> Task: Configure Task -> Create tasks.json file from template -> Others

를 선택하면 task.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"
    }
  ]
}

 

그리고 저장해준다.

 

 

5-3. 단축키 설정

 

ctrl + k + s 키를 눌러주면 단축키를 설정할 수 있는 화면이 나온다.

빌드 단축키(Run Build Task) : ctrl + alt + c

실행 단축키(Run Test Task): ctrl + alt + r

로 바꾸어주었다.

 

전체적으로 실행하는 키는 ctrl + F5이며 이건 디폴트이다.

실행 단축키와의 차이를 잘 모르겠는데, 친구가 알려주기를,

에러를 찾을 때 빌드랑 실행이랑 따로 해보고 싶을 때 위의 키를 사용하면 되고,

그냥 대부분의 상황에서 실행할 때 ctrl + F5를 사용하면 될 것 같다고 했다.

 

5-4. launch.json

launch.json은 디버깅을 할 때 필요하다고 한다.

Run -> Add configuration C++ (GDB/LLDB) -> (c면 gcc, c++이면 g++, 둘 다 사용한다면 g++).exe - Build and debug active file

를 하면 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": "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"
    }
  ]
}

 

역시나 경로는 동일한 것 같아 따로 수정해주지 않았다.

흐음 근데 계속 ctrl+f5를 누르니

 

launch: program '~~\build\Debug\outDebug' does not exist

이런 에러가 떴다.

(나는 D에서 해서 d로 나오는데, 대부분의 사람들은 C로 나올 것이다.)

 

그래서 위의 코드를 그대로 입력한 후, 밑에 나오는 코드 중, program 부분의 주소가

"program":"C:\....\build\debug\outDebug"

이렇게 되어있는거를 아래와 같이 바꾸어봤다.

 

${fileDirname}\\${fileBasenameNoExtension}.exe

하지만 이렇게 하니, ctrl + F5 하면 저런 에러메시지는 안 뜨는데, 뭔가 결과가 나오지는 않았다.

또, 외부 터미널이 켜졌다가 바로 꺼지는 현상이 발생했다.

 

해결방법!!

일단 기존의 코드 그대로

"program":"C:\....\build\debug\outDebug"

로 두고, chatgpt에게 물어봤더니 먼저 outDebug 파일이 있는지를 확인하라고 알려주었다.

파일경로를 그대로 검색(내가 말하는 모든 검색은 컴퓨터 아래 바에 있는 검색이다.)

에 입력하니 outDebug 파일이 있었다.

 

 

 

다음으로 launch.json에  "program":"C:\....\build\debug\outDebug"에서 Debug 다음에 .exe를 붙여보았다.

즉, "program":"C:\....\build\debug\outDebug.exe"

"program":"C:\....\build\debug\outDebug.exe"

 

라고 입력한 것이다.

 

이렇게 바꾸니 갑자기 에러메시지가 뜨는 것이 아니라, 외부터미널이 켜졌다가 꺼지는,

${fileDirname}\\${fileBasenameNoExtension}.exe

이걸 입력했을 때와 같은 상황이 나타났다.

아예 경로를 저걸로 바꿨을 때 무슨 문제가 생길까봐 exe를 붙인 코드로 쓰기로 결정하고,

내부터미널이 아니라 외부터미널에 나타나는 문제를 해결하려고 했다.

 

먼저 tasks.json에서 빌드가 되지 않는 것은 아닌지 확인해보았다.

ctrl + alt + b (나는 단축키를 설정해서 ctrl + alt + c로도 가능할 듯 하다.)

를 눌러 확인해보면 빌드가 성공적으로 되었다는 메시지가 떴다.

즉, tasks.json의 문제는 아니라는 뜻이었다.

 

다시 launch.json으로 돌아가보았다.

launch.json 코드를 확인하니 externalconsole: true라고 되어 있는 것을 확인했다.

이 경우, 외부터미널에 나타날 것 같았다.

그래서 2개의 externalconsole 중 첫번째껄 먼저 false라고 바꾸어봤는데,

아무 일도 일어나지 않아서 두번째 exteral console도 false로 바꾸어보았더니!!

 

내부터미널에 이렇게 나타나는 것을 확인할 수 있었다.

성공!!!!

디버그 콘솔에도 정상적으로 종료되고, exit code 0으로 나타난 것으로보아,

정상적으로 디버깅이 된 것 같다.

 

정상적으로 디버깅이 되지 않은 경우는 1, -1, 139 등의 다른 숫자가 뜬다고 한다.

 

신나서 한 5번 정도 실행했다.

 

또다른 문제는

 요런식으로 위에 이상한 메시지가 같이 뜬다는 건데,

다른 사람들도 이렇게 뜨는 게 종종 보여서 큰 문제는 아닌 것 같다.

 

만약 가능하면 이 문제도 해결해보고 싶다!

그럼 지금까지 c언어 환경세팅하기였습니당!!

앞으로는 c언어의 기본 문법 등 내가 c언어를 배우는 과정을 기록해보려고 한다.

python이랑은 굉장히 달라서 조금 힘들 것 같지만,

c언어가 내가 앞으로 할 직업이든, 업무이든 모든 것의 기본이 될 것 같아서

열심히 해보고 싶다!!

파이팅 해봅시당~

 

google2b97adc85ffdeb8c.html
0.00MB

'c언어' 카테고리의 다른 글

C언어 배우기 1일차 - C언어 코딩 도장 vol.1  (0) 2025.02.23