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]