find_package

Published:

CMake find_package 사용법

find_package(${yourpkg} REQUIRED)외부 패키지인 yourpkg 을 찾아서 세팅을 불러온다는 뜻이다.

하지만 중요한것은 find_package 로 package를 찾기는 했지만 실질적으로 lib를 추가하고, include를 하는등 실질적인 라이브러리 추가 작업은 하지 않은 것이다.

INCLUDE_DIRECTORIES(${yourpkg+INCLUDE_DIRS})TARGET_LINK_LIBRARIES( ${PROJ_NAME} ${yourpkg+LIBRARIES} ) 까지 완료하여야, 라이브러리를 성공적으로 불러올 수 있다.

예를 들어 ROS에서 자주 사용되는 catkin 을 예시로 들어보자.

find_package(catkin REQUIRED A B)

....

include_directories(
  ${catkin_INCLUDE_DIRS}
  include
)
target_link_libraries(${PROJECT_NAME} 
    ${catkin_LIBRARIES} 
)

이 뜻은 prefix로 catkin_ 이 붙은 모든 include directory를 include 한다는 뜻이고, catkin_ 이 붙은 모든 library를 link 한다는 뜻이다. 한번 쯤은 message(STATUS ${catkin_INCLUDE_DIRS}) 로 어떤 값들이 출력되는지 관찰하는걸 추천한다. A와 B의 include 경로가 나올것이다.

사실 find_package 가 하는 행동은 find<package>.cmake 파일을 찾는것이다. 만약 그 파일이 없을 경우, packageConfig.cmake 를 찾는다. 이를 통해 외부 패키지들의 cmake정보를 찾고, 외부 패키지에서 만들어진 라이브러리들을 불러올 수 있는 것이다.

[Reference]