비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail

Visual Studio Code에서 파일을 저장하거나 불러올때 부모 폴더를 기준으로 하기 때문에 하나의 폴더에 여러 개의 서브 폴더를 두고 프로젝트를 관리시 번거로운 점이 있습니다. 

현재 실행 파일의 위치를 확인하여 파일을 저장하거나 불러오면 이런 점이 해결됩니다. 다음 포스트를 참고하세요.  

C/C++ - 실행 파일의 절대 경로 얻는 방법 ( realpath, GetModuleFileName )
https://webnautes.tistory.com/1448



6. 한글 입출력 예제 

 

6-1. 리눅스 환경이라면 별다른 설정 변경없이 진행가능합니다. 7번을 진행하세요.

 

아래처럼 진행했는데 한글이 깨지는 경우 윈도우를 업데이트 해보세요..

 

메뉴에서 파일 > 기본설정 > 설정 을 선택합니다.

encoding을 검색하여 Encoding 항목을 euckr로 변경합니다.

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail



다음 예제를 새로운 파일로 저장하여 실행시켜보면 

 

#include <stdio.h>

int main()
{
    printf("문자열을 입력후 엔터를 누르세요!\n");

    char a[256];
    scanf("%s", a);

    printf(" \" %s \" 를 입력하셨네요.\n", a);
    return 0;
}




다음처럼 코드에 입력한 한글 문자열 출력과 입력한 문자열에 대한 출력이 모두 정상인 것을 볼 수 있습니다.


비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail

 

 

 

7. 디버깅하는 방법

진행하기 전에 위에서 작업했던 일부를 수정해야 합니다. 

프로젝트 폴더의 .vscode 폴더에 있는 tasks.json 파일을 열어서 컴파일 시 디버그 정보를 포함하도록 합니다. 

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail
비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail



7-A C++ 언어 디버깅

 

7-1. 테스트 해보기 위해서 새로운 하위 폴더를 생성하여 main.cpp 파일을 추가합니다. 

먼저 C++ 파일의 경우부터 보겠습니다.

 

#include <iostream>

using namespace std;

int c = 0;
int d = 100;

int main()
{
    int a = 2;
    int b = 2;
    int c = a + b;

    cout << a << " + " << b << " = " << c << endl;

    return 0;
}



비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail




숫자 5 왼쪽으로 마우스 커서를 이동 후. 마우스 왼쪽 버튼을 클릭하면 빨간점이 표시됩니다.

디버깅이 시작되면 잠시 멈추게되는 브레이크 포인트입니다. 

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail



7-2.  F5를 누릅니다.



C++(GDB/LLDB)를 선택합니다.

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail



컴파일러 경로가 있는 g++.exe를 선택합니다. 

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail




잠시 기다리면 디버깅이 시작됩니다. 

F11을 눌러서 다음 줄이 실행되게 할 수 있습니다. 

왼쪽에 보이는 변수 창에 지역 변수가 업데이트 됩니다. 

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail





7-3. 7-2 작업은 한번만 해주면 됩니다. 이후에는 브레이크 포인트를 지정하고 F5를 누르면  디버깅이 시작됩니다. 




7-4. main함수 에서 사용하는 전역 변수 c는 변수 항목의 Locals에 추가되었는데 

전역변수 d의 경우에는 추가되어 있지 않습니다. 

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail



이 경우 조사식에 마우스 커서를 가져가면 보이는 + 아이콘을 클릭하고 

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail



추가할 변수 이름을 입력후 엔터를 누르면

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail



해당 변수의 값이 보입니다.

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail




7-B C언어 디버깅

 

별도의 추가 작업 없이 동일하게 디버깅이 가능했습니다. 

앞에서 C++ 디버깅 테스트시 launch.json 설정 파일이 생성되었기 때문입니다. 



비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail



Visual Studio Code에서 C/C++ 프로그래밍 with Makefile ( Windows/Ubuntu)
https://webnautes.tistory.com/1429

Visual Studio Code에서 둘 이상의 소스 코드 파일로 구성된 프로젝트를 컴파일하려면 Makefile이나 cmake를 사용해야 합니다. 
테스트에 사용한 운영체제 버전은 Windows 10과 Ubuntu 20.04입니다.




8. CMake를 사용하여 둘 이상의 소스 코드 파일로 구성된 프로젝트 컴파일하기

 

8-1. CMake를 설치합니다.

https://cmake.org/download/  

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail



설치 진행 중 “Add CMake to the system PATH for all users”를 체크해야 합니다.

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail




8-2. 새로운 폴더를 열어줍니다. 

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail



8-3. “새 폴더” 아이콘을 클릭한 후, 폴더 이름 main을 입력 후, 엔터를 누릅니다. 



8-4. 새로 생성된 폴더 main을 한번 클릭한 후, 새파일 아이콘을 클릭하고 파일 이름 main.cpp를 입력 후, 엔터를 누릅니다.

같은 방식으로 main.h, add.cpp, sub.cpp를 생성합니다.

 

디버깅을 하려면 폴더 이름과 메인이 되는 코드의 이름을 일치 시켜야 합니다. 

여기에선 폴더 이름 main과 메인이 되는 코드의 이름 main.cpp의 이름을 일치시켰습니다. 

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail

 

main.cpp

 

#include <iostream>
#include "main.h"

int main()
{
    int a = 1;
    int b = 2;

    int c = add(a, b);
    int d = sub(a, b);

    std::cout << c << " " << d << std::endl;

    return 0;
}




main.h

 

int sub(int a, int b);
int add(int a, int b);




add.cpp

 

#include "main.h"

int add(int a, int b)
{
    int c;

    c = a + b;

    return c;
}




sub.cpp

 

#include "main.h"

int sub(int a, int b)
{
    int c;

    c = a - b;

    return c;
}



 

8-5. 메뉴에서 터미널 > 기본 빌드 작업 구성을 선택합니다. 

 

다음 항목들이 보이면 g++.exe를 클릭합니다.

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail

 

 

다음 선택 화면이 추가로 보일 수 있습니다.

템플릿에서 tasks.json 파일 만들기를 선택합니다. 

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail

 

Others를 선택합니다.

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail

 

 

탐색기의 .vscode 폴더에   tasks.json 파일이 추가되고 편집기에서 해당 파일이 열립니다.

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail

 

 

8-6. 편집기에 열린 tasks.json 파일을 다음 내용으로 대체하고 Ctrl +S를 눌러 저장합니다.

 

{
    "version": "2.0.0",
    "runner": "terminal",
    "type": "shell",
    "echoCommand": true,
    "presentation" : { "reveal": "always" },
    "tasks": [
          //C++ 컴파일
          {
            "label": "compile for C++",
            "command": "cd ${fileDirname} && cmake . -G \"MinGW Makefiles\" && mingw32-make",
            "group": "build",

            //컴파일시 에러를 편집기에 반영
            //참고:   https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher

            "problemMatcher": {
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    // The regular expression.
                  //Example to match: helloWorld.c:5:3: warning: implicit declaration of function 'prinft'
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        },
        // 바이너리 실행(Windows)
        {
            "label": "execute",
            "command": "cmd",
            "group": "test",
            "args": [
                "/C", "${fileDirname}\\${fileDirnameBasename}"
            ]
        }
    ]
}


 

8-7. 새파일 아이콘을 클릭하고 파일 이름 CMakeLists.txt를 입력 후, 엔터를 누릅니다.

파일 내용을 다음 내용으로 대체하고 Ctrl + S를 눌러 저장합니다. 

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail

 

cmake_minimum_required(VERSION 3.0)

get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
project(${ProjectId})

set (CMAKE_CXX_STANDARD 11)

file(GLOB SOURCES  *.cpp)

add_executable(${PROJECT_NAME} ${SOURCES} )




8-8. cpp 파일 아무거나 선택해서 열은 상태에서 Ctrl + Alt + C를 눌러 컴파일을 진행합니다.

터미널에 다음과 같은 메시지가 출력됩니다. 

 

> Executing task: cd D:\work\code\cpp_project\test-1 && cmake . -G "MinGW Makefiles" && mingw32-make <

 

-- The C compiler identification is GNU 8.1.0

-- The CXX compiler identification is GNU 8.1.0

-- Detecting C compiler ABI info

-- Detecting C compiler ABI info - done

-- Check for working C compiler: C:/mingw64/bin/gcc.exe - skipped

-- Detecting C compile features

-- Detecting C compile features - done

-- Detecting CXX compiler ABI info

-- Detecting CXX compiler ABI info - done

-- Check for working CXX compiler: C:/mingw64/bin/g++.exe - skipped

-- Detecting CXX compile features

-- Detecting CXX compile features - done

-- Configuring done

-- Generating done

-- Build files have been written to: D:/work/code/cpp_project/test-1

Scanning dependencies of target test-1

[ 25%] Building CXX object CMakeFiles/test-1.dir/add.cpp.obj

[ 50%] Building CXX object CMakeFiles/test-1.dir/main.cpp.obj

[ 75%] Building CXX object CMakeFiles/test-1.dir/sub.cpp.obj

[100%] Linking CXX executable test-1.exe

[100%] Built target test-1



8-9. Ctrl + Alt + R을 눌러서 실행합니다.

다음처럼 실행결과가 출력됩니다.

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail



8-10. 이제 새로운 서브 디렉토리를 생성한 후, CMakeLists.txt 파일만 복사해두면 다른 프로젝트도 컴파일 할 수 있습니다. 

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail



8-11. 디버깅을 해봅니다. 



다음 파일을 수정해야 합니다.



CMakeLists.txt 파일

 

추가

set(CMAKE_BUILD_TYPE Debug)

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail




 F5를 누르고 디버깅 시작시  

 

C++(GDB/LLDB)를 선택합니다.

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail



구성에서 다음처럼 첫번째 항목을 선택해야 합니다. 

 

비주얼 스튜디오 2022 컴파일 - bijueol seutyudio 2022 keompail


구성에서 위 스크린샷처럼 보이지 않는 경우 우선 Ctrl + Alt + C(앞에서 빌드하기 위해 사용한 단축키)를 눌러 실행파일을 우선 새로 생성합니다. 디버그 가능하도록 다시 실행파일을 만들기 위해서입니다.