본문 바로가기
개발툴

VSCode에서 CMake 없이 OpenCV 응용 프로그램 컴파일&디버깅

by j2b2 2023. 4. 19.

소스파일이 한두 개 정도의 작은 프로젝트에서는 CMake 없이 VSCode 설정만으로 빌드, 디버깅을 할 수 있다.

구글링 해서 나온 페이지를 따라 해도 CMake와 VSCode를 섞어 놓은 글들이 많이 보였고,

VSCode만으로 설정한다고 해도 꽤나 복잡한 과정을 거쳐야 환경 설정이 되는 글들이었다.

그래서 VSCode 홈페이지를 찾아봤더니 깔끔하게 정리가 되어 있었다.

CMake를 사용하는 방법은 이 글을 참고하면 된다.

 

Using C++ on Linux in VS Code를 참고하여 OpenCV를 사용하는 설정이다.

 

 

main.cpp

이미지를 불러서 띄워주는 예이다.

#include "opencv2/opencv.hpp"

int main(int argc, char** argv)
{
    cv::Mat img;
    img = cv::imread(argv[1]);
    cv::imshow("img", img);
    cv::waitKey();
    cv::destroyAllWindows();
    return 0;
}

 

 

tasks.json

빌드에 필요한 설정 파일이다. 이렇게 하면 아래와 유사한 파일이 생성된다.

VSCode에서 제공하는 파일에서 "args"에 OpenCV 라이브러리를 링크하는 부분을 추가했다.

CLI 빌드 명령어는 이곳을 참고했다.

빌드 중 오류가 발생한 위치와 메시지를 출력하는 설정은 VSCode 홈페이지의 Defining a problem matcher를 참고하여 추가한다.

 

그리고 터미널이 아닌 VSCode에서 바로 테스트를 하기 위해 키보드 단축키(ctrl+shift+v)를 추가하고,

바로 실행할 수 있는 설정을 추가한다.

 

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ build active file",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                // OpenCV 라이브러리 링크
                // 띄워쓰기 단위로 묶어줘야 한다.
                "$(pkg-config",
                "opencv4",
                "--libs",
                "--cflags)"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            // 오류 발생 위치와 메시지 출력
            "problemMatcher": {
                "owner": "c++",
                "fileLocation": [
                    "relative",
                    "${workspaceFolder}"
                ],
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            },
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        },
        // terminal이 아닌, VSCode에서 바로 실행 테스트를 하기 위해,
        // Keyboard Shortcuts에 Command "Task: Run Test Task"의 shortcut(ctrl+shift+v)을 추가하고,
        // 아래와 같이 설정을 추가
        {
            "type": "shell",
            "label": "C/C++: g++ test active file",
            "command": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [
                "./OpenCV_Logo_with_text.png"
            ],
            "group": {
                "kind": "test",
                "isDefault": true
            }
        }
    ],
    "version": "2.0.0"
}

 

 

launch.json

디버깅에 필요한 파일이다. 이렇게 하면 아래와 유사한 파일이 생성된다.

VSCode에서 제공하는 파일에서 "args"에 argument를 전달하는 부분을 추가했다.

{
    "configurations": [
        {
            "name": "C/C++: g++ build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [
            	// argument 추가
                "./OpenCV_Logo_with_text.png"
            ],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ build active file",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ],
    "version": "2.0.0"
}

 

 

c_cpp_properties.json

컴파일러 선택, include paths, C++ 버전에 관한 파일이다. 이렇게 하면 아래와 유사한 파일이 생성된다.

VSCode에서 제공하는 파일에서 "includePath"에 OpenCV 헤더파일 경로를 추가했다.

경로 마지막에 /**를 붙여주면 하위 폴더를 모두 검색해서 포함한다.

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                // OpenCV include 경로
                // 마지막에 /**를 붙여주면 하위폴더를 전부 포함한다.
                "/usr/local/include/opencv4/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}