VSC사용하기 with GCC

Code April·2022년 10월 4일
0

C언어

목록 보기
4/9

GCC(GNU C Compiler)의미로 출발했으며,리처드 스톨만에 의해 작성된
비용지불 없이 UNIX및 LINUX에서 동작하는 C컴파일러이다.
(최근에는 g++를 통해 C/C++언어를 모두 지원한다)
GCC이전에도 수없이 많이 C컴파일러가 존재 했지만, 비용을 지불하고
컴파일러를 구매해야 했다.
이번 강좌에서는 이 전통있는 gcc를 VSC와 연동해서 구동하는 방법을
알아 보자.

에디터/컴파일러/링커/디버거...이런 모듈들이 UNIX/LINUX에서는 별도로
존재했고, 그래서 이전에는 make file만드는 방법만 따로 설명한 책도
있었다.

make파일은 소스의 관리 및 컴파일러,링커,디버거를 어떻게 사용할지
기술한 일종의 발전된 batch file이라고 생각하면 된다.

이번 내용은 Window OS환경에서 g++(gcc),gdb등을 사용해서 C/C++
코드를 빌드하는 방법을 VSC(Visual Studio Code)를 통해 확인 한다.

이 과정은 어떻게 보면 노가다라고 말할수도 있다..
왜냐면...Window PC에서는 Visual Studio Community를 사용하면
그냥 편하게 사용할수 있고, 맥북은 Xcode를 사용하면 동일하게 추가 설치 없이 사용할 수 있다. 물론 Gcc는 아니고 Microsoft, Apple만의
컴파일러가 포함된 통합 개발 환경이지만 표준 C/C++ 언어를 지원하기
때문에 프로그램 개발에 전혀 문제는 없다.

왜 VSC에 GCC모듈을 붙여서 이렇게 생고생을 해야하나 할수도 있지만
VSC는 아주 유용한 소스편집기이고 또한 컴퓨터를 전공하는 학과에서는
VSC와 Gcc를 사용한 리포트를 종종 내기도 하기 때문에, VSC의 Plug-In
연동을 배운다 생각하고 진행해 보자.

1. g++ compiler설치하기

참조 : https://jhnyang.tistory.com/445?category=964790

https://www.msys2.org/ 에서 최신 버전을 다운받는다.

다운받은 실행파일(msys2-x86_64-20220904.exe) 더블클릭 설치

이제 msys2파일은 로컬 폴더에 설치가 되었고, 필요한 패키지를 수동으로
설치해주는 작업이 필요 하다.

윈도우 탐색기 - msys폴더(C:\msys64)로 이동 - mingw64.exe실행 후
아래와 같이 입력 후 Enter

중간에 Yes,No창이 뜨면 'Y'입력 후 다시 엔터

이제 mingw64 tool체인을 설치
pacman -S --needed base-devel ming2-w64-x86_64-toolchain 실행

아래에서 Enter를 눌러 모두 설치

시간이 지난 후 아래와 같이 설치가 완료 되어 진다.

파일 탐색기에서 확인도 가능 하다.

이제 시스템 환경 변수를 설정 하자. cygwin을 설정한 방법과 거의 유사

2. VSC(Visual Studio Code)설치
아래에 접속해서 본인의 PC에 맞는 항목을 설치한다.
현재 나의 PC는 인텔계열이므로 Windows x64의 Stable을
다운받아서 설치함.
url: https://code.visualstudio.com/

지금까지 MSYS2(MSYS2의 pacman)를 이용한 mingw64를 설치 했고,
시스템 환경 변수에도 등록했다.

3. VSC Extension설치
Microsoft C/C++ Extension을 설치 한다.

F1 or Ctrl + Shift + P을 눌러 환경 설정

  • "C/C++ edit"을 입력하여
  • 아래에서 화면에서 "Edit Configuration(JSON)" 선택

디폴트는 compilerPath가 Microsoft Compiler로 되어 있다.

지금은 g++(gcc포함)으로 변경할 것이므로, 아래와 같이 변경 한다.
Default내용에서 include path,compiler path,intelliSenseMode변경

4. task.json편집

VSC에서 F1눌러 검색창에서 Task입력

task.json이 없는 경우에는 create task_json선택

수정 전 task.json파일

수정 후 task.json파일

{
    "version": "2.0.0",
    "runner": "terminal",
    "type": "shell",
    "echoCommand": true,
    "presentation": {
        "reveal": "always"
    },
    "tasks": [
        {
            "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
                }
            }
        },
        {
            "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 활성 파일 빌드",
            "command": "C:\\msys64\\mingw64\\bin\\gcc.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "디버거에서 생성된 작업입니다."
        },
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 활성 파일 빌드",
            "command": "C:\\msys64\\mingw64\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
//            "group": {
//               "kind": "build",
//                "isDefault": true
//            },
            
            "detail": "디버거에서 생성된 작업입니다."
        },
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe 활성 파일 빌드",
            "command": "C:\\msys64\\mingw64\\bin\\gcc.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
              
            // "group": {
            //     "kind": "build",
            //     "isDefault": true
            // },

            "detail": "컴파일러: C:\\msys64\\mingw64\\bin\\gcc.exe"
        }
    ]
}코드를 입력하세요

5. 단축키 설정

메뉴가 아닌, 단축키를 통해 소스 코드를 빌드 및 실행할 수 있다.
ctrl+k+s을 누르거나, F1을 'keyboard shourtcut'을 검색하면
단축키를 편집할 수 있는 화면이 나타 난다.

profile
Next Level

0개의 댓글