Boost 使用cmake安装目标依赖项

Boost 使用cmake安装目标依赖项,boost,cmake,Boost,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_libr

我有一个项目,应该安装一个静态库及其所有依赖项。其中一个依赖项是
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

#。。。在这里定义源和公共头
添加库(${PROJECT\u NAME}
静止的
${PUBLIC_HEADERS}
${SOURCES}
)
设置\u目标\u属性(${PROJECT\u NAME}
性质
输出名称${PROJECT\u NAME}
调试后缀“\u d”
)
目标链接库(${PROJECT\u NAME}
公开的
Boost::Boost
)
目标目录(${PROJECT\u NAME}
公开的
$
$
私有的
$
)
设置(目标\u导出\u名称${PROJECT\u name}目标)
set(project_config${project_BINARY_DIR}/${project_NAME}config.cmake)
set(version\u config${PROJECT\u BINARY\u DIR}/${PROJECT\u NAME}ConfigVersion.cmake)
包括(CMakePackageConfigHelpers)
写入基本软件包版本文件(
${version_config}
版本
${PROJECT_VERSION}
兼容性相同主要版本
)
配置\u包\u配置\u文件(
${PROJECT\u SOURCE\u DIR}/cmake/${PROJECT\u NAME}Config.cmake.in
${project_config}
安装\u目标
${INSTALL_CMAKEDIR}
)
安装(目标)
${PROJECT_NAME}
出口
${targets\u export\u name}
档案文件
目标${INSTALL_LIBDIR}
组件库
图书馆
目标${INSTALL_LIBDIR}
组件库
运行时
目标${INSTALL_BINDIR}
组件箱
)
安装(导出)
${targets\u export\u name}
目的地
${INSTALL_CMAKEDIR}
)
安装(文件${PUBLIC\u HEADERS}目标${install\u INCLUDEDIR}/${PROJECT\u NAME}组件开发)
安装(文件)
${project_config}
${version_config}
目的地
${INSTALL_CMAKEDIR}
)

如果您需要安装目标文件,那么在这里使用
$

添加依赖项
是过分的,因为boost不是您需要在可执行文件之前构建的目标。
#... 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}
    )