비디오 코덱

Cmake에 대해

케케_ 2024. 11. 25. 12:46

코덱 학습을 준비하면서 처음으로 Cmake를 사용하게 됐다.
지피티를 이용해 학습하고 있어 답변을 저장한다.

 

 

CMake 정리

CMake는 C++ 프로젝트를 빌드하고 관리하기 위한 강력한 도구입니다. 주로 크로스플랫폼 프로젝트에서 빌드 프로세스를 자동화하고, 코드 수정 시 효율적으로 변경사항을 반영할 수 있도록 도와줍니다. 지금까지 다룬 내용을 핵심적으로 정리해볼게요.


1. CMake란?

  • 역할: CMake는 빌드 시스템 생성기입니다. 다양한 플랫폼(예: macOS, Windows, Linux)에서 Makefiles, Ninja, Visual Studio 프로젝트 파일 등을 생성하여 C++ 프로젝트를 빌드할 수 있도록 돕습니다.
  • 장점:
    • 여러 플랫폼에서 동일한 빌드 프로세스를 사용할 수 있음.
    • 대규모 프로젝트에서 파일과 라이브러리 관리를 단순화.
    • 추가 라이브러리(OpenCV 등)를 쉽게 포함.

2. CMake 설정의 기본 구조

CMake 프로젝트는 CMakeLists.txt 파일을 사용해 빌드 과정을 정의합니다. 주요 구성 요소는 다음과 같습니다:

CMakeLists.txt 기본 구조

cmake_minimum_required(VERSION 3.10)  # 최소 CMake 버전 설정
project(ProjectName)                  # 프로젝트 이름 설정

set(CMAKE_CXX_STANDARD 17)            # C++ 표준 설정

find_package(OpenCV REQUIRED)         # 라이브러리(OpenCV) 찾기

add_executable(TargetName main.cpp)   # 실행 파일 정의
target_link_libraries(TargetName ${OpenCV_LIBS})  # OpenCV와 링크
include_directories(${OpenCV_INCLUDE_DIRS})       # OpenCV 헤더 경로 포함

3. 주요 명령어 및 사용법

CMake 설정 단계

  1. CMake 설정 (cmake ..)
    • CMakeLists.txt 파일을 기반으로 프로젝트 설정 파일(Makefile 등)을 생성합니다.
    • 프로젝트 초기화 및 라이브러리 경로 등 설정 변경 시 실행합니다.
  2. 빌드 (cmake --build .)
    • 소스 코드를 컴파일하고 실행 파일을 생성합니다.
    • 소스 코드만 변경된 경우, cmake --build .만 실행하면 됩니다.

4. 코드 수정 시 필요한 빌드 과정

소스 코드 수정

  • 과정: cmake --build .
  • 설명: 수정된 파일만 다시 컴파일하고, 기존 설정을 재사용하여 빠르게 빌드.

CMakeLists.txt 수정

  • 과정: cmake .. → cmake --build .
  • 설명: 새로 추가된 파일, 라이브러리, 경로 등 변경 사항을 반영.

5. OpenCV와 CMake

OpenCV를 사용하는 프로젝트에서 CMakeLists.txt를 작성하는 기본 예시는 아래와 같습니다:

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(OpenCVProject)

set(CMAKE_CXX_STANDARD 17)

# OpenCV 패키지 찾기
find_package(OpenCV REQUIRED)

# 실행 파일 정의
add_executable(checkOpenCV main.cpp)

# OpenCV와 링크
target_link_libraries(checkOpenCV ${OpenCV_LIBS})

# 헤더 경로 포함
include_directories(${OpenCV_INCLUDE_DIRS})

6. 주의사항 및 팁

  1. CMake는 빌드 설정 파일을 생성하는 도구:
    • CMake는 컴파일러나 링크 명령을 직접 실행하지 않고, Makefile이나 Visual Studio 프로젝트 파일을 생성합니다.
    • 생성된 파일을 통해 빌드를 실행합니다.
  2. cmake ..와 cmake --build .의 차이:
    • cmake ..: 프로젝트 설정 파일을 생성(초기 설정).
    • cmake --build .: 실제로 빌드 수행(컴파일 및 실행 파일 생성).
  3. 빌드 디렉토리 관리:
    • 항상 프로젝트 루트와 별도로 build 디렉토리를 생성하여 빌드 파일을 관리합니다.
    • 새로 설정이 필요할 때 build 디렉토리를 삭제(rm -rf build/)하고 다시 설정.
  4. OpenCV 링크 및 경로 문제 해결:
    • 라이브러리가 링크되지 않거나 경로 문제가 발생하면 find_package(OpenCV REQUIRED)와 include_directories 확인.
    • macOS에서 GUI 관련 기능 사용 시 --with-qt 또는 --with-gtk 설치 옵션 확인.

7. CMake의 빌드 프로세스 요약

  1. 초기 설정:
    • cmake .. 실행하여 설정 파일 생성.
  2. 빌드:
    • cmake --build .로 빌드 수행.
  3. 소스 코드 수정 후:
    • 다시 cmake --build . 실행.
  4. CMake 설정 수정 후:
    • cmake .. → cmake --build . 실행.

8. 간단한 CMake 워크플로우

디렉토리 구조:

project/
├── CMakeLists.txt
├── main.cpp
├── build/  # 빌드 디렉토리

명령어 순서:

# 초기 설정
mkdir build
cd build
cmake ..

# 빌드
cmake --build .

# 실행
./checkOpenCV

9. CMake의 장점

  • 플랫폼 독립적 빌드 시스템: Windows, macOS, Linux에서 동일한 설정으로 빌드 가능.
  • 빌드 효율성: 변경된 파일만 재컴파일.
  • 라이브러리 통합: OpenCV와 같은 외부 라이브러리를 쉽게 연결.

결론

CMake는 대규모 프로젝트와 크로스플랫폼 개발에 필수적인 도구입니다. 소스 코드만 수정되었다면 cmake --build .만 수행하면 되며, 설정 파일을 수정할 경우에는 cmake ..를 포함해 다시 설정해야 합니다.

추가적인 질문이 있거나 특정 상황에 대한 설명이 필요하다면 알려주세요! 😊

 

 

 

 

 

 

 

 

 

 

VS Code에서 C++ 프로젝트를 빌드하고 실행하기 위해 CMake 파일을 작성하려면 다음 단계에 따라 작성할 수 있습니다. 이 과정에서는 CMakeLists.txt를 만들어 프로젝트를 설정합니다.


1. 기본적인 CMake 설정

CMake는 C++ 프로젝트의 빌드 시스템을 설정하는 데 사용됩니다. CMakeLists.txt는 프로젝트를 정의하고 빌드 설정을 구성하는 데 필요한 모든 정보를 포함하는 파일입니다.

CMakeLists.txt의 기본 구조

cmake_minimum_required(VERSION 3.10) # 최소 CMake 버전
project(MyProject)                  # 프로젝트 이름

# C++ 표준 설정
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 소스 파일 추가
set(SOURCES
    main.cpp
    other_file.cpp
)

# 실행 파일 생성
add_executable(MyProject ${SOURCES})

2. CMakeLists.txt 작성 세부 사항

  • cmake_minimum_required: 최소로 요구되는 CMake 버전을 설정합니다.
  • project: 프로젝트 이름을 설정합니다.
  • set(CMAKE_CXX_STANDARD ...): C++ 표준 버전을 설정합니다. 예: C++17, C++20 등.
  • add_executable: 빌드 결과로 생성될 실행 파일 이름과 소스 파일을 지정합니다.

3. VS Code 설정

CMake Tools 확장 설치

  1. VS Code에서 "Extensions" 뷰로 이동합니다.
  2. "CMake Tools"를 검색하고 설치합니다.

CMake Presets 생성

VS Code는 CMakePresets.json을 사용하여 빌드 및 디버그 환경을 설정할 수 있습니다. CMakePresets.json 파일을 프로젝트 루트에 생성합니다.

예시:

{
  "version": 3,
  "cmakeMinimumRequired": {
    "major": 3,
    "minor": 10
  },
  "configurePresets": [
    {
      "name": "default",
      "generator": "Ninja",  // 또는 "Unix Makefiles" 등 환경에 맞는 빌드 도구
      "binaryDir": "${sourceDir}/build",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Debug"
      }
    }
  ],
  "buildPresets": [
    {
      "name": "default",
      "configurePreset": "default"
    }
  ]
}

4. 디버그 및 실행 설정

launch.json

프로젝트를 디버깅하려면 .vscode/launch.json 파일을 작성합니다.

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug C++",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/build/MyProject", // 빌드된 실행 파일 경로
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb", // Windows에서는 "lldb"를 사용할 수도 있음
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "CMake: Build" // 빌드 작업
    }
  ]
}

tasks.json

CMake 빌드를 위한 작업 설정:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "CMake: Build",
      "type": "shell",
      "command": "cmake --build build", // 빌드 명령어
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}

5. 프로젝트 구조 예시

MyProject/
├── CMakeLists.txt
├── CMakePresets.json
├── .vscode/
│   ├── launch.json
│   ├── tasks.json
├── main.cpp
└── other_file.cpp

6. VS Code에서 빌드 및 실행

  1. 빌드:
    • VS Code의 명령 팔레트(Ctrl+Shift+P)에서 CMake: Configure를 선택하여 빌드 시스템을 설정합니다.
    • CMake: Build를 실행하여 프로젝트를 빌드합니다.
  2. 디버그:
    • 디버깅 탭에서 F5를 눌러 디버그 실행을 시작합니다.

위 과정을 따라 CMakeLists.txt와 VS Code 설정 파일을 구성하면 C++ 프로젝트를 VS Code에서 빌드하고 실행할 수 있습니다. 추가로 궁금한 사항이 있으면 알려주세요!

'비디오 코덱' 카테고리의 다른 글

흑백 이미지 처리의 효율  (1) 2024.11.27
컬러를 흑백으로 변환하기 : cvtColor()  (0) 2024.11.27
imread(), imshow() 사용해보기  (0) 2024.11.27
OpenCV란  (0) 2024.11.27
OpenCV 설치 및 Cmake 설정 (MacOs)  (1) 2024.11.25