코덱 학습을 준비하면서 처음으로 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 설정 단계
- CMake 설정 (cmake ..)
- CMakeLists.txt 파일을 기반으로 프로젝트 설정 파일(Makefile 등)을 생성합니다.
- 프로젝트 초기화 및 라이브러리 경로 등 설정 변경 시 실행합니다.
- 빌드 (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. 주의사항 및 팁
- CMake는 빌드 설정 파일을 생성하는 도구:
- CMake는 컴파일러나 링크 명령을 직접 실행하지 않고, Makefile이나 Visual Studio 프로젝트 파일을 생성합니다.
- 생성된 파일을 통해 빌드를 실행합니다.
- cmake ..와 cmake --build .의 차이:
- cmake ..: 프로젝트 설정 파일을 생성(초기 설정).
- cmake --build .: 실제로 빌드 수행(컴파일 및 실행 파일 생성).
- 빌드 디렉토리 관리:
- 항상 프로젝트 루트와 별도로 build 디렉토리를 생성하여 빌드 파일을 관리합니다.
- 새로 설정이 필요할 때 build 디렉토리를 삭제(rm -rf build/)하고 다시 설정.
- OpenCV 링크 및 경로 문제 해결:
- 라이브러리가 링크되지 않거나 경로 문제가 발생하면 find_package(OpenCV REQUIRED)와 include_directories 확인.
- macOS에서 GUI 관련 기능 사용 시 --with-qt 또는 --with-gtk 설치 옵션 확인.
7. CMake의 빌드 프로세스 요약
- 초기 설정:
- cmake .. 실행하여 설정 파일 생성.
- 빌드:
- cmake --build .로 빌드 수행.
- 소스 코드 수정 후:
- 다시 cmake --build . 실행.
- 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 확장 설치
- VS Code에서 "Extensions" 뷰로 이동합니다.
- "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에서 빌드 및 실행
- 빌드:
- VS Code의 명령 팔레트(Ctrl+Shift+P)에서 CMake: Configure를 선택하여 빌드 시스템을 설정합니다.
- CMake: Build를 실행하여 프로젝트를 빌드합니다.
- 디버그:
- 디버깅 탭에서 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 |