명령 find_package
에는 Module
모드와 Config
모드의 두 가지 모드가 있습니다. Module
실제로 Config
모드 가 필요할 때 모드 를 사용하려고 합니다.
모듈 모드
Find<package>.cmake
프로젝트 내에있는 파일 . 이 같은:
CMakeLists.txt
cmake/FindFoo.cmake
cmake/FindBoo.cmake
CMakeLists.txt
함유량:
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
find_package(Foo REQUIRED) # FOO_INCLUDE_DIR, FOO_LIBRARIES
find_package(Boo REQUIRED) # BOO_INCLUDE_DIR, BOO_LIBRARIES
include_directories("${FOO_INCLUDE_DIR}")
include_directories("${BOO_INCLUDE_DIR}")
add_executable(Bar Bar.hpp Bar.cpp)
target_link_libraries(Bar ${FOO_LIBRARIES} ${BOO_LIBRARIES})
참고 CMAKE_MODULE_PATH
높은 우선 순위가 있고 표준 다시 작성해야 할 때 유용 할 수있다 Find<package>.cmake
파일.
구성 모드 (설치)
<package>Config.cmake
파일은 외부에 있으며 install
다른 프로젝트의 명령에 의해 생성됩니다 ( Foo
예 :).
foo
도서관:
> cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(Foo)
add_library(foo Foo.hpp Foo.cpp)
install(FILES Foo.hpp DESTINATION include)
install(TARGETS foo DESTINATION lib)
install(FILES FooConfig.cmake DESTINATION lib/cmake/Foo)
구성 파일의 단순화 된 버전 :
> cat FooConfig.cmake
add_library(foo STATIC IMPORTED)
find_library(FOO_LIBRARY_PATH foo HINTS "${CMAKE_CURRENT_LIST_DIR}/../../")
set_target_properties(foo PROPERTIES IMPORTED_LOCATION "${FOO_LIBRARY_PATH}")
기본적으로 프로젝트는 CMAKE_INSTALL_PREFIX
디렉토리에 설치됩니다 .
> cmake -H. -B_builds
> cmake --build _builds --target install
-- Install configuration: ""
-- Installing: /usr/local/include/Foo.hpp
-- Installing: /usr/local/lib/libfoo.a
-- Installing: /usr/local/lib/cmake/Foo/FooConfig.cmake
구성 모드 (사용)
가져온 대상 find_package(... CONFIG)
에 포함 FooConfig.cmake
하는 데 사용 합니다 foo
.
> cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(Boo)
# import library target `foo`
find_package(Foo CONFIG REQUIRED)
add_executable(boo Boo.cpp Boo.hpp)
target_link_libraries(boo foo)
> cmake -H. -B_builds -DCMAKE_VERBOSE_MAKEFILE=ON
> cmake --build _builds
Linking CXX executable Boo
/usr/bin/c++ ... -o Boo /usr/local/lib/libfoo.a
가져온 대상은 고도로 구성 가능합니다. 내 답변을 참조하십시오 .
최신 정보