[CMake] 10. 모듈

글쓴이 keunjun 날짜

CMake에서는 코드의 재사용성을 높히기 위하여, 모듈이라는 개념을 제공한다. 쉽게 말하면 CMakeLists 파일에서 다른 CMake 파일을 실행한다고 보면 된다. 이러한 기능을 사용자에게 제공하므로서 사용자는 필요한 모든 기능을 필요할때마다 구현할 필요가 없이 이미 구현된 CMake 파일을 불러다 쓰므로서 개발이 빨라지고 코드의 신뢰성이 상승하는 효과를 얻을 수 있다.

모듈을 이용하는 가장 쉬운 방법은 include() (doc)를 이용하는 것이다. 아래 예제를 살펴보자.

include(CheckTypeSize)
check_type_size(long SIZEOF_LONG)

미리 구현되어진 CheckTypeSize.cmake라는 파일을 읽어와 그 안에 정의되어있는 매크로를 사용할 수 있게 해준다. 실제로 CheckTypeSize.cmake 파일에 가서 확인해보면 check_type_size 이라는 매크로가 이미 정의되어 있는 것을 확인 할 수 있다. 그렇다면 CMake는 어떻게 CheckTypeSize.cmake를 찾을 수 있었을까? CMake는 모듈을 찾을 때 CMAKE_MODULE_PATH에 있는 폴더들에서 원하는 모듈이 있는지 찾아본다. 그 안에 없다면 Module이 설치된 곳을 확인해본다.

set(CMAKE_MODULE_PATH 
    ${CMAKE_MODULE_PATH} 
    ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

만약에 새롭게 CMake 파일을 만들고 다른 CMake 파일에서 include 하고 싶다면 CMAKE_MODULE_PATH에 경로를 추가하면 된다.


Find_package()

find_package() (doc)는 include()처럼 이미 정의된 CMake 파일을 읽어서 그 안에 정의된 함수, 매크로 그리고 변수를 사용 할 수 있게 해준다. include()와 함께 모듈을 읽어드린다는 공통점을 갖고 있지만 좀 더 특수한 상황에서 쓰인다. 바로, 외부 라이브러리를 사용하기 위해 만들어진 모듈들을 부르는데 사용된다는 점인데 모듈을 찾는 규칙이 include()와 조금 다르다.

find_package(${PACKAGE_NAME})

위의 예제 경우 CMAKE_MODULE_PATH 폴더에서 Find${PACKAGE_NAME}.cmake 파일을 찾거나 CMAKE_INSTALL_PREFIX/lib/${PACKAGE_NAME} 폴더에서 ${PACKAGE_NAME}Config.cmake 파일을 찾아서 읽는다.

MyCMakeProject
├── CMakeLists.txt
├── cmake
│   ├── FindA.cmake
│   └── B.cmake
├── include
└── src

위와 같은 폴더 구조를 갖는 프로젝트에서 상위 폴더에 있는 CMakeLists 파일은 다음과 같다면

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
find_package(A)
include(B)

두번째 줄은 FindA.cmake를, 세번째 줄에서는 B.cmake를 불러온다. find_package()의 더 자세한 내용은 나중에 라이브러리를 다루는 파트에서 다루도록 한다.

카테고리: CMake

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다