You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Boost DLL文件输出到CMake install指定的安装目录

解决方案

你可以借助CMake 3.21及以上版本内置的$<TARGET_RUNTIME_DLLS>生成器表达式实现需求,该方案天然符合你的跨平台要求:

  • Windows下vcpkg默认triplet为动态链接,表达式会自动识别目标依赖的所有动态DLL文件
  • Linux下vcpkg默认triplet为静态链接,表达式返回空值,不会执行多余的安装操作

代码修改

保留原有CMakeLists.txt内容不变,新增如下安装规则即可:

# 原有代码保持不变
find_package(Boost REQUIRED COMPONENTS filesystem locale)
[...]
target_link_libraries(${PROJECT_NAME} 
    PRIVATE
        MyOtherSharedLibrary
        Boost::headers 
        Boost::filesystem 
        Boost::locale
)

# 新增安装规则
# 1. 安装项目自身的二进制文件
install(TARGETS ${PROJECT_NAME}
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
)

# 2. 自动安装依赖的动态库(仅Windows生效)
install(IMPORTED_RUNTIME_ARTIFACTS
    $<TARGET_RUNTIME_DLLS:${PROJECT_NAME}>
    DESTINATION bin
)

验证方式

执行安装命令后:

  • Windows平台下,安装目录的bin文件夹会同时包含你编译生成的二进制和对应的Boost DLL文件
  • Linux平台下,安装目录只会包含你编译生成的二进制文件,不会有多余的Boost相关文件

低版本CMake兼容方案

如果你使用的CMake版本低于3.21,可以使用平台判断的兼容方案:

install(TARGETS ${PROJECT_NAME}
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
)

if(WIN32)
    # 直接匹配构建目录下的Boost DLL文件到安装目录
    install(DIRECTORY ${CMAKE_BINARY_DIR}/
        DESTINATION bin
        FILES_MATCHING PATTERN "boost_*.dll"
        PATTERN "CMakeFiles" EXCLUDE
        PATTERN "*.dir" EXCLUDE
    )
endif()

内容的提问来源于stack exchange,提问作者keinkoenig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:54:08