[英]Install target dependencies with cmake
我有一個應該安裝靜態庫及其所有依賴項的項目。 這些依賴項之一是boost
。
我有類似以下的東西,但它不起作用:
cmake_minimum_required(VERSION 3.9.0)
project(install_test)
find_package(Boost REQUIRED COMPONENTS system)
set(Boost_USE_STATIC_LIBS TRUE)
add_executable(test src/main.cpp)
target_link_libraries(test Boost::boost)
add_dependencies(test Boost::boost)
install(TARGETS test DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(TARGETS Boost::boost DESTINATION ${CMAKE_INSTALL_LIBDIR})
注意:可以找到boost
,如果我刪除最新的install
語句,一切正常。
怎么能做到這一點?
由於安裝很可能發生在同一台機器上(在您的庫將被編譯),並且 Boost 庫已經安裝(因為它可以找到),您應該通過 Config.cmake 文件導出您的庫及其依賴項. 所有依賴項都可以通過find_dependency
找到(我認為您不想復制所有 boost 庫)。 它將在與您安裝的庫鏈接時搜索所需的包。
${PROJECT_NAME}Config.cmake.in 文件
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)
find_dependency(glad REQUIRED)
find_dependency(glm REQUIRED)
include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake")
check_required_components(gl_traits)
CMakeLists.txt
#... define here sources and public headers
add_library(${PROJECT_NAME}
STATIC
${PUBLIC_HEADERS}
${SOURCES}
)
set_target_properties(${PROJECT_NAME}
PROPERTIES
OUTPUT_NAME ${PROJECT_NAME}
DEBUG_POSTFIX "_d"
)
target_link_libraries(${PROJECT_NAME}
PUBLIC
Boost::boost
)
target_include_directories(${PROJECT_NAME}
PUBLIC
$<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}/${PROJECT_NAME}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/${PROJECT_NAME}>
PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
)
set(targets_export_name ${PROJECT_NAME}Targets)
set(project_config ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake)
set(version_config ${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
${version_config}
VERSION
${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
configure_package_config_file(
${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in
${project_config}
INSTALL_DESTINATION
${INSTALL_CMAKEDIR}
)
install(TARGETS
${PROJECT_NAME}
EXPORT
${targets_export_name}
ARCHIVE
DESTINATION ${INSTALL_LIBDIR}
COMPONENT lib
LIBRARY
DESTINATION ${INSTALL_LIBDIR}
COMPONENT lib
RUNTIME
DESTINATION ${INSTALL_BINDIR}
COMPONENT bin
)
install(EXPORT
${targets_export_name}
DESTINATION
${INSTALL_CMAKEDIR}
)
install(FILES ${PUBLIC_HEADERS} DESTINATION ${INSTALL_INCLUDEDIR}/${PROJECT_NAME} COMPONENT dev)
install(FILES
${project_config}
${version_config}
DESTINATION
${INSTALL_CMAKEDIR}
)
如果您需要安裝目標文件,請使用$<TARGET_FILE:target_name>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.