안동민 개발노트 아이콘

안동민 개발노트

1장 : C++ 소개와 개발 환경

개발 환경 설정

앞 절에서 C++이 어떤 언어인지, 그리고 어디에 활용되는지 개괄적으로 살펴봤습니다. 이제는 C++ 코드를 직접 작성하고 실행하기 위한 준비 단계로 넘어가겠습니다.

건축가가 건물을 짓기 위해 설계 도구와 자재를 준비하듯이, 프로그래머도 코드를 작성하기 위한 적절한 도구와 환경이 필요합니다.

이 장에서는 C++ 개발에 필요한 핵심 도구를 정리하고, 컴퓨터에 개발 환경을 설정하는 과정을 단계별로 안내합니다.

먼저 전체 흐름을 보면, C++ 개발 환경은 코드를 쓰는 도구와 실행 파일을 만드는 도구를 하나의 경로로 연결하는 작업입니다.


C++ 개발을 위한 핵심 도구들

C++ 코드를 작성하고 실행하기 위해서는 크게 세 가지 핵심 도구가 필요합니다.

  • 텍스트 에디터 (Text Editor): 소스 코드를 작성하는 도구입니다. 메모장처럼 단순한 것부터, 코드 자동 완성, 문법 강조 등 다양한 편의 기능을 제공하는 전문 에디터까지 폭넓은 선택지가 있습니다.
  • 컴파일러 (Compiler): 우리가 작성한 C++ 소스 코드는 컴퓨터가 직접 이해할 수 있는 언어가 아닙니다. 컴파일러는 사람이 이해할 수 있는 C++ 코드를 컴퓨터가 이해하고 실행할 수 있는 기계어(Machine Code)로 번역해 주는 역할을 합니다. 이 과정이 없으면 우리의 코드는 그저 텍스트 파일에 불과합니다.
  • 링커 (Linker): 컴파일러가 생성한 여러 개의 목적 파일(Object File)들을 하나로 묶어 최종 실행 가능한 프로그램으로 만들어주는 역할을 합니다. 필요에 따라 외부 라이브러리들도 연결합니다.

이 세 가지 도구는 대부분 통합 개발 환경(IDE, Integrated Development Environment)이라는 형태로 하나로 묶여 제공됩니다.

IDE는 코드 작성, 컴파일, 디버깅(오류 수정), 빌드(실행 파일 생성) 등 개발의 전 과정을 한 곳에서 편리하게 수행할 수 있도록 지원합니다.


C++ 컴파일러 소개

C++ 프로그램을 실행하기 위해서는 먼저 소스 코드를 기계어로 변환해야 합니다.

이 작업을 수행하는 것이 컴파일러입니다.

주요 C++ 컴파일러는 다음과 같습니다.

GCC (GNU Compiler Collection)
  • 가장 널리 사용되는 오픈 소스 컴파일러
  • Linux, macOS, Windows(MinGW) 등 다양한 플랫폼 지원
  • 명령어 예 : g++ -o myprogram myprogram.cpp
Clang
  • LLVM 프로젝트의 일부로 개발된 컴파일러
  • 빠른 컴파일 속도와 명확한 오류 메시지로 유명
  • Apple의 Xcode에 기본 컴파일러로 채택
  • 명령어 예 : clang++ -o myprogram myprogram.cpp
Microsoft Visual C++ Compiler
  • Windows 환경에 최적화된 컴파일러
  • Visual Studio에 포함되어 있음
  • 명령어 예 : cl myprogram.cpp

통합 개발 환경 (IDE) 소개

IDE는 코드 편집, 컴파일, 디버깅 등의 기능을 통합적으로 제공하는 소프트웨어입니다.

주요 C++ IDE는 다음과 같습니다.

Visual Studio
  • Microsoft에서 개발한 통합 개발 환경(IDE)
  • 광범위한 기능과 확장성 제공
  • 무료 버전(Community Edition) 사용 가능
Visual Studio Code
  • 경량화된 코드 에디터이지만 확장을 통해 IDE 기능 구현 가능
  • 다양한 언어 지원, 크로스 플랫폼
  • C++ 개발을 위한 확장 팩 제공
CLion
  • JetBrains사에서 개발한 크로스 플랫폼 C/C++ IDE
  • 코드 분석 및 리팩토링 도구 제공
  • 유료이지만 학생은 무료로 사용 가능
Eclipse CDT
  • 오픈 소스 IDE
  • 풍부한 플러그인 생태계
  • 대규모 프로젝트 관리에 적합

개발 환경 설정 단계 (VSCode)

Visual Studio Code 설치
C++ 확장 팩 설치
  • VS Code 내에서 확장(Extensions) 탭 열기
  • C/C++ 검색 후 Microsoft의 확장 팩 설치
MinGW 설치 (Windows 환경)
  • MSYS2 페이지에서 최신 설치 프로그램을 다운로드하거나 하이퍼링크를 통해 바로 다운로드할 수 있습니다.
  • 설치 프로그램을 실행하고 설치 마법사의 단계를 따라 진행합니다. (win10 64비트 이상)
  • msys2를 실행하고 아래 명령어를 입력합니다.
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
  • Enter를 눌러 설치를 진행합니다.
  • Enter를 눌러 툴체인 그룹의 기본 패키지 설치를 수락합니다.
환경 변수 설정
  • 시스템 환경 변수 편집 > 환경 변수 > Path > 편집
  • MinGW의 bin 폴더 경로 추가
기본값으로 설치했을 경우 경로
C:\msys64\ucrt64\bin
프로젝트 폴더 생성 및 설정
  • 새 폴더 생성 후 VS Code로 열기
  • .vscode 폴더 내에 c_cpp_properties.json, tasks.jsonlaunch.json 파일 생성 및 설정
  • (선택) settings.jsonextensions.json 파일 생성 및 설정
  • 해당 작업이 번거로우면 템플릿 다운받기
c_cpp_properties.json
{
  "configurations": [
    {
      "name": "Win32",
      "includePath": ["${workspaceFolder}/**"],
      "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
      "compilerPath": "C:/msys64/ucrt64/bin/g++.exe",
      "cStandard": "c17",
      "cppStandard": "c++20",
      "intelliSenseMode": "windows-gcc-x64"
    }
  ],
  "version": 4
}
tasks.json
{
  "tasks": [
    {
      "type": "cppbuild",
      "label": "C/C++: g++.exe 활성 파일 빌드",
      "command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
      "args": [
        "-fdiagnostics-color=always",
        "-g",
        "${fileDirname}/*.cpp",
        "-o",
        "${workspaceFolder}/Debug/${fileBasenameNoExtension}.exe"
      ],
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "디버거에서 생성된 작업입니다."
    }
  ],
  "version": "2.0.0"
}
launch.json
{
  "configurations": [
    {
      "name": "C/C++: g++.exe 활성 파일 빌드 및 디버그",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/Debug/${fileBasenameNoExtension}.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${fileDirname}",
      "environment": [],
      "externalConsole": false,
      "internalConsoleOptions": "neverOpen",
      "MIMode": "gdb",
      "miDebuggerPath": "C:/msys64/ucrt64/bin/gdb.exe",
      "setupCommands": [
        {
          "description": "gdb에 자동 서식 지정 사용",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        },
        {
          "description": "디스어셈블리 버전을 Intel(으)로 설정",
          "text": "-gdb-set disassembly-flavor intel",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "C/C++: g++.exe 활성 파일 빌드"
    }
  ],
  "version": "2.0.0"
}
(선택) settings.json
{
  "[cpp]": { "editor.defaultFormatter": "ms-vscode.cpptools" },
  "terminal.integrated.defaultProfile.windows": "PowerShell",
  "github.copilot.editor.enableAutoCompletions": false,
  "workbench.colorCustomizations": {
    "terminalCursor.foreground": "#0064FF",
    "terminal.foreground": "#ffffff",
    "terminal.ansiCyan": "#000000"
  },
  "files.exclude": {
    ".vscode": true
  }
}
(선택) extensions.json
{
  "recommendations": ["PKief.material-icon-theme", "ms-vscode.cpptools"],
  "unwantedRecommendations": ["ms-vscode.cpptools-extension-pack"]
}

위 설정 파일들은 서로 독립적으로 보이지만, 실제로는 같은 컴파일러와 같은 실행 파일 경로를 공유해야 합니다. 아래 그림처럼 편집 기준, 빌드 명령, 디버그 대상이 한 경로로 맞아야 합니다.

첫 번째 프로그램 작성 및 실행

새 파일 생성 (main.cpp)
main.cpp
#include <iostream>

int main() {
    std::cout << "Hello, C++ World!" << std::endl;
    return 0;
}
파일 저장 후 터미널에서 다음 명령어 실행
g++ -o hello main.cpp
./hello

첫 프로그램이 바로 실행되지 않을 때는 IDE 설정을 무작정 바꾸기보다, 저장된 소스 파일, 컴파일러 호출, 링커 단계, 실행 파일 위치를 순서대로 나누어 확인하는 편이 빠릅니다. 실패 단계만 분리해도 고칠 파일과 설정 범위가 크게 줄어듭니다.

첫 환경 설정의 목표는 많은 설정 파일을 외우는 것이 아니라, 저장한 main.cpp가 컴파일러와 링커를 거쳐 실행 파일로 만들어지는 경로를 직접 확인하는 것입니다.