Visual Studio Code ::: MinGW와 함께 GCC 사용

GCC를 MinGW와 함께 사용(MinGW와 함께 GCC 사용

이 튜토리얼에서는 mingw-w64 GCC C++ 컴파일러(g++) 및 GDB 디버거 사용 Windows에서 실행되는 프로그램을 만들도록 Visual Studio Code를 구성합니다.

VS Code를 구성한 후 VS Code에서 간단한 “Hello World” 프로그램을 컴파일하고 디버그합니다. 이 튜토리얼은 GCC, GDB, Mingw-w64 또는 C++ 언어를 다루지 않습니다. 인터넷에는 이러한 주제에 대한 좋은 리소스가 많이 있습니다.

문제가 있는 경우 VS 코드 문서 저장소 이 자습서에 대한 문제를 자유롭게 제출하십시오.

전제 조건(요구 사항)

이 자습서를 성공적으로 완료하려면 다음 단계가 필요합니다.

  1. 비주얼 스튜디오 코드 설치하기 위해서 .
  2. VS Code용 C/C++ 확장 설치하기 위해서 . 보기 확장(Ctrl+Shift+X ) “c++”를 검색하여 C/C++ 확장을 설치합니다. .
  3. GCC, Mingw-w64 및 기타 유용한 C++ 도구 및 라이브러리의 현재 기본 빌드를 제공하는 MSYS2에 대해. 밍우 -w64의 최신 버전을 받으세요. MSYS2 사이트에서 최신 설치 프로그램을 다운로드하거나 설치 프로그램을 보려면 여기를 클릭하십시오. 이 링크를 사용할 수 있습니다 .
  4. MSYS2 웹사이트 ~에서 설치 지시에 따라 mingw-w64를 설치합니다. 필요한 모든 시작 메뉴와 명령을 실행하십시오. .pacman
  5. mingw-w64 툴체인을 설치합니다( pacman -S –필요한 기본 개발 mingw-w64-x86_64-toolchain). 터미널의 pacmanMSYS2 명령 달리다. 그룹의 모든 구성원을 설치하려면 기본값을 수락하십시오. 도구 체인.
  6. 다음 단계로 mingw-w64 폴더의 경로를 다음으로 변경합니다. binWindows 환경 변수를 추가합니다.PATH
    1. Windows 검색 표시줄에 “설정”을 입력하여 Windows 설정을 엽니다.
    2. 계정의 환경 변수 편집 구하다 .
    3. 사용자 변수떨어져 있는 변수 1 선택된 다음 편집하다 선택하다.
    4. 새로 만들다 선택하다 mingw-w64 대상 폴더 경로를 시스템 경로에 추가합니다. 정확한 경로는 설치한 Mingw-w64 버전과 설치된 위치에 따라 다릅니다. 위의 설정으로 Mingw-w64를 설치했다면 경로에 다음을 추가합니다. 기음:\msys64\mingw64\bin.
    5. 확인 선택에 의해 업데이트된 PATH를 저장합니다. 새 PATH 위치를 사용하려면 콘솔 창을 다시 열어야 합니다.

MinGW 설치 확인(MinGW 설치 확인)

mingw-w64 도구가 올바르게 설치되고 사용 가능한지 확인하려면 명령 프롬프트를 열고 다음을 입력합니다.

gcc --version
g++ --version
gdb --version
  1. 예상 출력을 얻지 못하거나 인식된 명령이 아닌 경우 PATH 항목이 컴파일러가 있는 mingw-w64 바이너리의 위치와 일치하는지 확인하십시오. g++. gdb의 해당 PATH 항목에 컴파일러가 없는 경우 MSYS2 웹사이트 의 지침에 따라 Mingw-w64를 설치했는지 확인하십시오.
  2. gcc는 올바른 출력을 가지고 있지만 사례 gdbMingw-w64 도구 세트에서 누락된 패키지를 설치해야 합니다.
    • 누락된 패키지 mingw-w64-gdb “miDebuggerPath 값이 잘못되었습니다.” 이것이 오류의 원인 중 하나입니다. PATH가 올바르면 컴파일을 시도할 때 메시지가 나타납니다.

안녕하세요 세계를 만듭니다 (안녕하세요 세상을 만듭니다)

Windows 명령 프롬프트에서 프로젝트모든 VS Code 프로젝트를 넣을 수 있는 빈 폴더를 만듭니다. 그런 다음 하위 폴더를 만듭니다. helloworld 폴더로 이동하고 다음 명령을 입력하여 해당 폴더에서 VS Code를 엽니다.

mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .

암호.” 이 명령은 “작업 공간”이 되는 현재 작업 폴더에서 VS Code를 엽니다. 네, 직접 생성한 폴더이기 때문에 저자를 신뢰 선택에 의해 트러스트 작업 공간 대화를 수락합니다.

튜토리얼을 진행하면서 작업 공간의 .vscode 폴더에 생성된 세 개의 파일을 볼 수 있습니다.

  • Tasks.json(조립 지침)
  • launch.json(디버거 설정)
  • c_cpp_properties.json(컴파일러 경로 및 intellisense 설정)

소스 코드 파일 추가(소스 코드 파일 추가)

파일 탐색기 제목 표시줄에서 새로운 파일 버튼을 누르고 파일 이름 지정 안녕하세요 세계. cpp.


Hello World 소스 코드 추가

이제 이 소스 코드를 붙여넣습니다.

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

using namespace std;

int main()
{
    vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

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

지금 Ctrl+S 파일을 저장합니다. 방금 추가한 파일 VS Code 사이드바에서. 파일 관리자 보다( Ctrl+Shift+E ) 어떻게 표시되는지 확인합니다.


기초적인 파일 메뉴에서 자동 저장 선택 자동으로 파일 변경 사항을 자동으로 저장하려면 저장을 선택하십시오. 5월 .

맨 왼쪽에 있는 활동 표시줄을 사용하는 경우 구하다 , 소스 제어 그리고 실행 예를 들어 다른 보기를 열 수 있습니다. 비. 이 튜토리얼의 뒷부분 실행 보기를 살펴 보겠습니다. VS Code 사용자 인터페이스 설명서 다음에서 다양한 보기에 대해 자세히 알아보세요. .

참조 : C++ 파일을 저장하거나 열면 새로운 기능 및 수정 사항을 테스트하는 데 사용할 수 있는 참가자 버전의 가용성에 대한 C/C++ 확장의 알림이 표시될 수 있습니다. 엑스( 알림 지우기 ) 이 알림을 무시합니다. .

IntelliSense 알아보기(IntelliSense 알아보기)

새 파일에서 또는 helloworld.cpp 위로 마우스를 가져갑니다. 유형 정보를 볼 수 있습니다. 변수 선언 후 멤버 함수를 호출하는 것과 같습니다. 타이핑을 시작하십시오. 모든 멤버 함수가 있는 완성 목록과 객체에 대한 유형 정보가 있는 창이 즉시 표시되어야 합니다. .vectorstringmsgmsg.msg


버튼을 누르시오 선택한 막대를 삽입할 수 있습니다. 그런 다음 여는 괄호를 추가하여 함수가 예상하는 인수에 대한 정보를 표시합니다.

helloworld.cpp 실행(helloworld.cpp 실행)

C++ 확장은 컴퓨터에 설치한 C++ 컴파일러를 사용하여 프로그램을 생성합니다. helloworld.cppVS 코드에서 실행 및 디버깅 전에 C++ 컴파일러가 설치되어 있는지 확인하십시오.

  1. 활성 파일로 helloworld.cpp 열려 있는
  2. 편집기의 오른쪽 상단에 있는 재생 버튼을 누릅니다.
  3. 시스템에서 감지된 컴파일러 목록에서 C/C++: g++.exe는 활성 파일을 빌드하고 디버그합니다. 선택하다.

처음 실행할 때만 컴파일러를 선택하라는 메시지가 표시됩니다. 안녕하세요 세계. cpp. 이 컴파일러는 파일에서 “기본” 컴파일러로 설정됩니다. 작업.json.

  1. 빌드가 성공하면 프로그램의 출력이 통합됩니다. 단말기 에 나타납니다

프로그램을 처음 실행하면 C++ 확장자가 프로젝트의 task.json 폴더에 있는 .vscode 파일을 만듭니다. task.json은 빌드 구성을 저장합니다.

tasks.json 파일은 아래 JSON과 유사해야 합니다.

{
  "tasks": (
    {
      "type": "cppbuild",
      "label": "C/C++: g++.exe build active file",
      "command": "C:\\msys64\\mingw64\\bin\\g++.exe",
      "args": (
        "-fdiagnostics-color=always",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}\\${fileBasenameNoExtension}.exe"
      ),
      "options": {
        "cwd": "${fileDirname}"
      },
      "problemMatcher": ("$gcc"),
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "Task generated by Debugger."
    }
  ),
  "version": "2.0.0"
}

참조 : 변수 참조작업.json 의 변수에 당신은 그것에 대해 더 배울 수 있습니다 .

그만큼 명령 설정은 실행할 프로그램을 지정합니다. 이 경우 g++입니다. 준비 args는 g++에 전달할 명령줄 인수를 지정합니다. 이러한 인수는 컴파일러에서 예상하는 순서대로 지정해야 합니다.

이 작업은 g++에 활성 파일( ${file}) 컴파일 및 현재 디렉토리( ${fileDirname}) 활성 파일과 이름은 같지만 확장자는 .exe( ${fileBasenameNoExtension}.exe를 사용하여 실행 파일을 빌드하도록 지시합니다.) helloworld.exe.

label은 작업 목록에 표시될 값입니다. 원하는 대로 이름을 지정할 수 있습니다.

세부 정보는 작업 목록에서 작업 설명으로 사용됩니다. 유사한 작업과 구별하기 위해 이 값의 이름을 바꾸는 것이 좋습니다.

지금부터 플레이 버튼 프로그램을 빌드하고 실행하는 방법을 알아보기 위해 tasks.json 파일을 읽을 것입니다. 다음에서 여러 빌드 작업을 정의할 수 있습니다. “tasks.json” 파일이 있으며 기본으로 표시된 작업은 재생 버튼으로 사용됩니다. 기본 컴파일러를 변경해야 하는 경우 작업: 기본 빌드 작업 구성 넌 달릴 수 있어 또는 세그먼트를 교체하고 기본값을 제거하여 tasks.json 파일을 수정할 수 있습니다.

    "group": {
        "kind": "build",
        "isDefault": true
    },

이를 통해:

    "group": "build",

tasks.json 파일을 수정합니다(task.json을 수정합니다.)

“tasks.json”과 같은 인수를 사용하여 여러 C++ 파일을 생성합니다. 변경할 수 있습니다. 이렇게 하면 “${workspaceFolder}/*.cpp” 현재 폴더의 ${file}모든 파일이 생성됩니다. 하드코딩된 파일 이름(예: ) .cpp를 교체하여 출력 파일 이름을 변경할 수도 있습니다. .”${fileDirname}\\${fileBasenameNoExtension}.exe””${workspaceFolder}\\myProgram.exe”

helloworld.cpp 디버그(helloworld.cpp 디버그)

  1. 활성 파일로 helloworld.cpp 로 돌아가 .
  2. 편집기 사이드바를 클릭하거나 현재 줄에서 F9를 사용하여 중단점을 설정합니다.

  3. 재생 버튼 옆의 드롭다운 목록에서 C/C++ 파일 디버그 선택하다.


  4. C/C++: g++를 선택하고 시스템에서 감지된 컴파일러 목록에서 활성 파일을 디버그합니다. 선택하다 (컴파일러를 처음 실행/디버그할 때만 선택하라는 메시지가 표시됩니다. helloworld.cpp).

플레이 버튼에 C/C++ 파일 실행 그리고 C/C++ 파일 디버그 두 가지 모드가 있습니다. 마지막으로 사용한 모드로 기본 설정됩니다. 재생 버튼에 디버그 아이콘이 표시되면 드롭다운 메뉴를 사용하는 대신 재생 버튼을 클릭하여 문제를 해결할 수 있습니다.


디버거 탐색(디버거 살펴보기)

코드 단계별 실행을 시작하기 전에 몇 가지 UI 변경 사항을 살펴보겠습니다.

  • 소스 코드 편집기 하단에 내장 터미널이 나타납니다. 디버그 출력 탭에서 디버거가 실행 중임을 나타내는 출력이 표시되어야 합니다.
  • 편집기는 디버거를 시작하기 전에 중단점을 설정한 줄을 강조 표시합니다.
  • 왼쪽의 실행 및 디버그 보기는 디버깅 정보를 표시합니다. 것이 가능하다 . 이 자습서의 뒷부분에서 예제를 볼 수 있습니다.
  • 코드 편집기 상단에 디버깅 패널이 나타납니다. 왼쪽에 있는 점을 잡아 화면에서 이동할 수 있습니다.

코드를 단계별로 실행(코드 살펴보기)

이제 코드를 단계별로 실행할 수 있습니다.

  1. 디버깅 제어판에서 넘어 아이콘을 클릭하거나 누르면 변수가 생성되고 초기화되는 for 루프의 첫 번째 줄까지 프로그램 실행이 계속됩니다. 전화할 때 벡터 및 클래스 내의 모든 내부 함수 호출을 건너뜁니다. 왼쪽에 변하기 쉬운 .stringmsg 창에서 변경 사항을 확인합니다.이 경우 루프의 변수 이름이 이제 디버거에 표시되기 때문에 오류가 예상되지만 명령문이 아직 실행되지 않았으므로 이 시점에서 읽을 내용이 없습니다. 그러나 이 진술이 완전하므로 다음의 내용은 메시지가 표시됩니다.
  2. 이 프로그램의 다음 명령문으로 계속하려면 넘어 다시 누릅니다(루프를 초기화하기 위해 실행 중인 내부 코드를 건너뜁니다). 지금 변하기 쉬운 창에 루프 변수에 대한 정보가 표시됩니다.
  3. 명령을 실행하려면 넘어 다시 누르십시오 cout. (2019년 3월 릴리스부터 C++ 확장은 루프가 끝날 때까지 디버그 콘솔에 출력되지 않습니다.)
  4. 네가 원한다면 벡터의 모든 단어가 콘솔에 출력될 때까지 여전히 건너뛰기를 누를 수 있습니다. 하지만 궁금하시다면 단계별로 한 번의 클릭으로 C++ 표준 라이브러리 소스 코드 살펴보기 자신의 코드로 돌아가고 싶다면 방법이 있습니다. 넘어 계속 밀어야 합니다. 또 다른 방법은 코드 편집기에서 탭으로 전환하고 루프 내에서 명령문을 여는 것입니다. helloworld.cpp의 아무 곳에나 삽입점을 놓습니다. F9 코드에서 중단점을 설정하기 위해 누르는 것입니다. . 해당 줄에 중단점이 설정되었음을 나타내기 위해 왼쪽 여백에 빨간색 점이 나타납니다.cout그런 다음 F5를 누릅니다. 누르다 표준 라이브러리 헤더의 현재 줄에서 실행을 시작합니다. 실행이 중단됨 cout. 네가 원한다면 F9 중단점을 다시 누르면 중단점을 해제할 수 있습니다.
  5. 루프가 완료되면 GDB의 다른 진단 정보와 함께 내장 터미널에서 출력을 볼 수 있습니다.

시계 설정(시계 설정)

때때로 프로그램이 실행되는 동안 변수 값을 추적하고 싶을 수 있습니다. 너무 가변적 모니터링 당신은 설정하여 이것을 할 수 있습니다

  1. 루프 안에 삽입점을 놓습니다. 점검 표현 창에서 더하기 기호를 클릭하고 텍스트 상자를 입력하십시오. 워드 루프 변수의 이름을 입력합니다. 이제 루프를 통과하여 모니터링 창을 봅니다.
  2. 루프 앞에 다음 문을 추가하여 다른 시계를 추가합니다. 정수 i = 0;. 그런 다음 다음 문을 루프에 넣습니다. ++나;. i 이제 이전 단계에서와 같이 시계를 추가합니다.
  3. 중단점에서 실행이 일시 중지된 동안 변수 값을 빠르게 보려면 해당 변수 위에 마우스 포인터를 올려 놓으십시오.

launch.json으로 디버깅 사용자 지정(launch.json으로 디버깅 사용자 정의)

재생 버튼 또는 F5 디버깅할 때 C++ 확장은 동적 디버그 구성을 자발적으로 생성합니다.

예를 들어 런타임에 프로그램에 전달되는 인수를 지정하여 디버그 구성을 사용자 지정하려는 경우가 있습니다. 파일에서 사용자 지정 디버그 구성을 정의할 수 있습니다. 시작.json.

생성 재생 버튼 드롭다운 메뉴에서 디버그 구성 추가발사.json 선택하다.


그러면 미리 정의된 다양한 디버깅 구성이 있는 드롭다운 메뉴가 나타납니다. C/C++ 선택 : g++.exe 활성 파일 생성 및 디버그 .


VS 코드 launch.json은 다음과 같은 파일을 생성합니다.

{
  "version": "0.2.0",
  "configurations": (
    {
      "name": "C/C++: g++.exe build and debug active file",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
      "args": (),
      "stopAtEntry": false,
      "cwd": "${fileDirname}",
      "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
        }
      ),
      "preLaunchTask": "C/C++: g++.exe build active file"
    }
  )
}

위의 JSON에서 program 디버깅할 프로그램을 지정합니다. ${fileDirname} 여기서 활성 파일 폴더( ) 및 확장자가 .exe인 활성 파일 이름( ) 로 설정 ${fileBasenameNoExtension}.exe, 활성 파일은 helloworld.cpp입니다. helloworld.exe. 재산 args는 런타임에 프로그램에 전달되는 인수의 배열입니다.

기본적으로 C++ 확장은 소스 코드에 중단점을 추가하지 않으며 stopAtEntry는 잘못된.

디버깅을 시작할 때 디버거가 메서드에서 중지하려면 stopAtEntry 값을 on으로 설정 .truemain 변경

지금부터 디버깅을 위해 프로그램을 시작할 때 재생 버튼과 F5 키 .launch.json 파일에서 읽기

C/C++ 구성(C/C++ 구성)

C/C++ 확장에 대한 더 많은 제어를 원하는 경우 컴파일러 경로, 포함 경로, C++ 기본값(기본적으로 C++17) 등과 같은 설정을 변경할 수 있는 c_cpp_properties.json 파일을 만들 수 있습니다.

명령 팔레트( Ctrl+Shift+P ) 에 C/C++: 구성 편집(UI) 명령을 실행하여 C/C++ 구성 UI를 볼 수 있습니다.


그 다음에 C/C++ 구성 페이지가 열립니다. 여기에서 변경하면 VS Code가 해당 변경 사항을 폴더에 저장합니다. c_cpp_properties.json의 파일에 쓰기 .vscode.

구성 이름은 다음과 같습니다. GCC ~처럼 변화 컴파일러 경로 g++ 컴파일러로 드롭다운 설정 인텔리센스 모드 컴파일러( gcc-x64 )가 적절하게 설정되었습니다.


Visual Studio Code는 다음 설정을 지원합니다. .vscode\c_cpp_properties.json. 이 파일을 직접 열면 다음과 같이 표시됩니다.

{
  "configurations": (
    {
      "name": "GCC",
      "includePath": ("${workspaceFolder}/**"),
      "defines": ("_DEBUG", "UNICODE", "_UNICODE"),
      "windowsSdkVersion": "10.0.18362.0",
      "compilerPath": "C:/msys64/mingw64/bin/g++.exe",
      "cStandard": "c17",
      "cppStandard": "c++17",
      "intelliSenseMode": "windows-gcc-x64"
    }
  ),
  "version": 4
}

프로그램에 작업 공간이나 표준 라이브러리 경로에 없는 헤더 파일이 포함된 경우에만 해당됩니다. 경로 배열 포함 설정에 추가해야 합니다.

컴파일러 경로(컴파일러 경로)

확장자는 compilerPath 설정을 사용하여 C++ 표준 라이브러리 헤더 파일의 경로를 파생시킵니다. 확장 프로그램이 이러한 파일을 찾을 위치를 알고 있는 경우 스마트 완성 및 정의로 이동 내비게이션 등의 기능을 제공할 수 있습니다.

C/C++ 확장 시스템에서 찾은 항목을 기반으로 컴파일러의 기본 위치로 컴파일러 경로를 채우려고 시도합니다. 확장은 여러 공통 컴파일러 위치에 있습니다.

구하다 CompilerPath 순서는 다음과 같습니다.

  • 먼저 Microsoft Visual C++ 컴파일러를 확인하십시오.
  • 그런 다음 WSL(Linux용 Windows 하위 시스템)에서 g++를 검색합니다.
  • 그런 다음 mingw-w64에 대한 g++.

Visual Studio 또는 WSL이 설치된 경우 프로젝트에 대해 선호하는 컴파일러와 일치하는 compilerPath입니다. 변경해야 할 수도 있습니다. 예를 들어 설치 옵션 i686 아키텍처, win32 스레딩 및 sjlj 예외 처리와 함께 Mingw-w64 버전 8.1.0을 설치한 경우 경로는 다음과 같습니다. C:\Program Files (x86)\mingw-w64\i686-8.1.0-win32-sjlj-rt_v6-rev0\mingw64\bin\g++.exe.

문제를 해결하다(문제 해결)

MSYS2가 설치되었지만 여전히 g++ 및 gdb를 찾을 수 없습니다.(MSYS2가 설치되었지만 여전히 g++ 및 gdb를 찾을 수 없습니다.)

Visual Studio Code에서 C++ 및 Mingw-w64 시작하기

mingw w64 설치에서 g++ 및 gdb용 Visual Studio Code의 C++ 확장 구성

code.visualstudio.com

MSYS2 웹사이트 의 단계를 따르십시오. 도구가 포함된 Mingw-w64를 설치하려면 MSYS CLI를 사용해야 합니다. pacman -S –디버거를 얻으려면 base-devel mingw-w64-x86_64-toolchain도 필요합니다. 전체 mingw-w64 툴체인( )을 설치해야 합니다. gdb.

MinGW 32비트(MinGW 32비트)

32비트 버전의 MinGW 도구 세트가 필요한 경우 MSYS2 위키에서 다운로드 섹션을 참조하십시오. 여기에는 32비트 및 64비트 설치 옵션에 대한 링크가 포함되어 있습니다.