CMake

BERT·2023년 4월 17일
0

CMake

cross-platform : 어떤 플랫폼에서도 사용 가능한 범용적 소프트웨어
윈도우 PC, 맥, 우분투, 안드로이드..
컴파일러와 독립적인 작동 방식을 가짐
빌드를 해주는 주체는 아니지만 어떠한 시스템에도 맞는 빌드 파일을 생성해주는 역할을 함

System

  • System OS

  • Hardware architecture
    CPU architecture : amd64x86, arm aarch64

플랫폼(system)이 다르면 소프트웨어도 이어지지 않음
동일한 소스 코드를 타겟 시스템에서 직접 재빌드를 하거나
호스트 PC에서 타겟 보드로 cross compile
호스트 PC : amd64x86
타겟 보드 : arm aarch64

Build thirdparty

cmake 설치
sudo apt install -y cmake
opencv github에서 소스 다운
OpenCV github
git clone https://github.com/opencv/opencv.git

Generate

mkdir build install
cd build

cmake를 이용해서 opencv 빌드
generate하고 싶은 프로젝트에 CMakeLists.txt가 존재하는 가장 상위 디렉터리 경로
cmake ../opencv/

  • debug 모드
    cmake -DCMAKE_BUILD_TYPE=Debug ../opencv
    코드 최적화가 되어 있지 않아 메모리 많이 필요
    디버깅에 필요한 모든 정보 확인 가능
  • release 모드
    cmake -DCMAKE_BUILD_TYPE=Release ../opencv
    코드 최적화가 되어 있어 속도 빠름
    디버깅하기 어려움
  • build system 선택
    ninja
    sudo apt install ninja-build
    cmake -DCMAKE_BUILD_TYPE=Release -GNinja ../opencv
  • install prefix
    설치 저장 위치 설정
    default : /usr/local/lib
    장점 : 어떤 프로젝트에서도 쉽게 로딩 가능
    단점 : 동일 라이브러리 여러 버전 설치 시 충돌
    cmake -DCMAKE_BUILD_TYPE=Release -GNinja -DCMAKE_INSTALL_PREFIX=../install ../opencv

Build

병렬 빌드 작업 수 설정
CPU 코어 하나 당 작업 하나씩 할당
make -jN

현재 CPU 코어 16개

유저가 필요한 파일만 따로 복사
sudo make install

Hello CMake

CLion 프로젝트 생성

CMakeLists.txt 확인

hello_cmake 프로젝트에 C++를 사용
project(hello_cmake LANGUAGES CXX)

14로만 빌드

set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 14)

빌드

실행

hello_cmake
├ CMakeLists.txt
├ modules
│ ├ CMakeLists.txt
│ ├ module1
│ │ ├ CMakeLists.txt
│ │ ├ include
│ │ │ └ module1
│ │ │   └ ClassMat.hpp
│ │ └ src
│ │   └ ClassMat.cpp
│ ├ module2
│ │ ├ CMakeLists.txt
│ │ ├ include
│ │ │ └ module2
│ │ │   └ ClassEigenMat.hpp
│ │ └ src
│ │   └ ClassEigenMat.cpp
│ └ module3
│   ├ include
│   └ src
├ examples
│ ├ exec_module1.cpp
│ └ exec_module1_module2.cpp
└ thirdparty
  ├ OpenCV
  │ ├ build
  │ ├ install
  │ └ opencv
  └ Eigen3
    ├ build
    ├ install
    └ eigen

regenerate 진행 시 문제 발생

캐시 삭제
rm -rf CMakeCache.txt CMakeFiles/

Generate

cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../install ../opencv

Build

make -j
sudo make install

thirdparty 추가 설치

Eigen3 gitlab
git clone https://gitlab.com/libeigen/eigen.git
mkdir build install
cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../install ../eigen
sudo make install

CMakeLists.txt command

add_subdirectory 하위 CMakeLists.txt를 읽기 위함
add_executable 실행 파일 생성
add_library 라이브러리 생성
find_package thirdparty library 로딩
target_include_directories 헤더 파일 연결
target_link_libraries 타겟 라이브러리에 라이브러리 연결
message 디버깅 용도

0개의 댓글