Ubuntu 18.04에서 VSCode를 활용한 C++ 및 OpenCV 개발 환경 구축

기본 개발 도구 설치

이 가이드는 Ubuntu 18.04 기준으로 작성되었지만, macOS나 Windows 10에서도 대부분 유사하게 적용할 수 있습니다. 먼저 Visual Studio Code를 설치해야 합니다. 설치 후 C/C++ 확장팩을 추가해야 하는데, 때때로 ~/.vscode/extensions 디렉터리에 대한 권한 문제가 발생할 수 있습니다. 이 경우 다음 명령어로 접근 권한을 부여할 수 있습니다:

sudo chmod o+w ~/.vscode
sudo chmod o+w ~/.vscode/extensions

권한 조정 후 VSCode 내에서 정상적으로 확장 프로그램을 설치할 수 있게 됩니다.

C++ 확장 프로그램 추가

확장 탭에서 C++를 검색하고 첫 번째 결과인 Microsoft 제공의 C/C++ 확장을 설치합니다. 이 확장은 IntelliSense, 디버깅, 코드 탐색 등의 핵심 기능을 제공합니다.

디버그 설정: launch.json

작업 폴더의 .vscode 디렉터리에 launch.json 파일을 생성하여 디버거 동작 방식을 정의합니다:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "GDB로 실행",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/${fileBasenameNoExtension}.out",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": true,
      "MIMode": "gdb",
      "miDebuggerPath": "/usr/bin/gdb",
      "preLaunchTask": "build",
      "setupCommands": [
        {
          "description": "gdb 출력 포맷 활성화",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ]
    }
  ]
}
  • program: 빌드된 실행 파일 경로를 지정합니다. 여기서는 확장명이 .out인 파일을 대상으로 합니다.
  • MIMode: Linux에서는 gdb, Windows(MinGW)에서는 gdb, macOS에서는 lldb를 사용합니다.
  • miDebuggerPath: 디버거 바이너리 위치를 명시합니다. 일반적으로 /usr/bin/gdb입니다.
  • preLaunchTask: 디버그 전 자동 실행할 작업 이름을 지정합니다.

빌드 태스크 설정: tasks.json

VSCode에서 Ctrl+Shift+P → "Tasks: Configure Task"를 선택하거나 직접 .vscode/tasks.json을 생성합니다:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build",
      "type": "shell",
      "command": "g++",
      "args": [
        "-g",
        "-std=c++17",
        "${file}",
        "-o",
        "${fileBasenameNoExtension}.out",
        "-I/usr/local/include",
        "-I/usr/local/include/opencv4",
        "-L/usr/local/lib",
        "-lopencv_core",
        "-lopencv_imgproc",
        "-lopencv_highgui",
        "-lopencv_imgcodecs",
        "-lopencv_videoio"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "problemMatcher": ["$gcc"]
    }
  ]
}
  • label: 이 값이 preLaunchTask와 일치해야 합니다.
  • -I: 헤더 파일 검색 경로를 추가합니다.
  • -L: 라이브러리 파일 경로를 지정합니다.
  • -l: 링크할 라이브러리를 지정합니다. 예를 들어 libopencv_core.so-lopencv_core로 표기합니다. 절대 -llibopencv_core라고 쓰지 마세요.

IntelliSense 설정: c_cpp_properties.json

자동 완성과 심볼 탐색을 위해 헤더 경로를 등록합니다. 명령 팔레트에서 C/Cpp: Edit Configurations (UI)를 선택하거나 아래 내용으로 파일을 직접 생성합니다:

{
  "configurations": [
    {
      "name": "Linux",
      "includePath": [
        "${workspaceFolder}/**",
        "/usr/local/include",
        "/usr/local/include/opencv4"
      ],
      "defines": [],
      "compilerPath": "/usr/bin/gcc",
      "cStandard": "c17",
      "cppStandard": "c++17",
      "intelliSenseMode": "linux-gcc-x64"
    }
  ],
  "version": 4
}

OpenCV 4.x 이상을 사용 중이라면 /usr/local/include/opencv4 경로를 포함해야 하며, 3.x라면 opencv2 경로를 사용합니다.

의존성 문제 해결: libjasper

일부 시스템에서 OpenCV 빌드 시 libjasper.so.1 누락 오류가 발생할 수 있습니다. 이를 해결하려면 다음 명령어로 패키지를 설치합니다:

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

검증 코드

설정 완료 후 간단한 테스트 코드로 동작 확인:

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    cv::Mat image = cv::Mat::zeros(400, 400, CV_8UC3);
    cv::circle(image, cv::Point(200, 200), 100, cv::Scalar(0, 255, 0), -1);
    cv::imshow("Test", image);
    cv::waitKey(0);
    return 0;
}

이 코드가 컴파일되고 창이 정상적으로 나타난다면 모든 설정이 성공한 것입니다.

태그: vscode C++ OpenCV ubuntu gdb

9월 7일 01:25에 게시됨