CMake 설치
설치할 프로그램의 소스코드 가져오기(이번 강의에서는 OpenCV이용)
로컬 환경으로 다운로드
sudo apt -get install -y git
을 통해 git을 설치하도록 하자Build를 해보자. CMake build에는 2가지 단계가 필요하다.
clone이 끝났다면 home폴더에 opencv라는 폴더가 생겼다
opencv를 위한 build와 install folder를 만들자
build폴더 안에 들어간다.
cmake ../opencv
cmake
명령어를 통해서 cmake를 호출함...
은 상위를 뜻함이 명령어만 쳐도 generate가 된다.
더 보여주고 싶은 것은
CMake에서도 debug모드와 release모드를 선택할 수 있다. generate단계에서 option을 주면 된다.
cmake -D../opencv
-D
를 주면 파라미터를 옵션으로 주겠다는 뜻이다.cmake -DCMAKE_BUILD_TYPE=Debug ../opencv
cmake -DCMAKE_BUILD_TYPE=Release ../opencv
Build System 고르는 방법
-G
는 generatorcmake -DCMAKE_BUILD_TYPE=Release - GNINJA ../opencv
install prefix
cd/usr/include
이런곳에 있을 것.cmake -DCMAKE_BUILD_TYPE=Release -GNINJA -DCMAKE_INSTALL_PREFIX=../opencv_install ../opencv
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../opencv_install ../opencv
실행결과
generate까지 되었으니 build폴더의 내부를 보자.
build를 해보자
make
를 치는것이다.make
를 치게 되면 자동으로 Makefile 기준으로 build가 실행이 된다.-j
라는 옵션이 있다. make -j
-j
는 동시에 빌드를 할 수 있는 작업의 수를 의미한다.make -j2
, make -j4
뒤의 숫자를 통해 원하는 동시 작업의 수를 적는다.라이브러리가 빌드 되었다.(lib 폴더에)
하지만 opencv에서는 install 기능을 지원한다.
build 폴더에는 build 중간에 필요한 파일들이 있다. CMakeCache, CMakeDownloadLog...등등
유저입장에서 opencv를 사용하는데 필요한건 아니기에 필요한 파일들만 따로 모아주는 install을 해보자
sudo make install
을 통해 install이 가능하다.
[Generate 과정]
cmake_DCMAKE_BUILD_TYPE=Release -GNinja -DCMAKE_INSTALL_PREFIX=../install ../opencv
-DCMAKE_BUILD_TYPE=Debug/Release
-GNinja
-DCMAKE_INSTALL_PREFIX=../install
../opencv
make -j
make
-j
hello_cmake LANGUAGES CXX
라고 해주면 C++프로젝트라는것을 명시해줄 수 있다.set(CMAKE_CXX_STANDARD_REQUIRED ON)
을 추가할 것이다.cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../install ../opencv
make -j
로 빌드를 실행한다.(-j는 에러가 발생하여 -j2로 진행하였음)sudo make install
을 통해서 install을 해준다.add_subdirectory(modules)
를 추가해준다.set(MODULE1_SOURCE_FILES)
add_library()
, 라이브러리의 이름은 module1${}
안에 적어주면 된다.include_directories()
target_include_directories()
find_package()
라는 함수를 사용한다.find_package(OpenCV REQUIRED)
REQUIRED라는 키워드를 사용한다.find_package()
함수는 system에 설치된 library들만 먼저 찾는다.HINTS ${}
를 사용해준다.CMAKE_SOURCE_DIR
는 CMakeLists를 호출하는 가장 최상위단 CMake build의 entry의 디렉토리를 의미한다.(hello_cmake폴더가 될 것)if (OpenCV_FOUND)
message(STATUS "OpenCV Found! - ${OpenCV_DIR}")
endif()
target_link_libraries(module1 PRIVATE ${OpenCV_LIBS})
add_executalbe()
을 하나 추가해준다; 실행파일의 이름은 exec_module1이라고 해준다add_executable(exec_module1)
target_link_libraries
를 통해 link를 해준다.target_include_directories
에서 include directories를 PRIVATE로 되어있는 것을 -> PRIVATE로 바꾸어준다.add_subdirectory(module2)
를 추가하고