【问题标题】:Add shared library to cpack将共享库添加到 cpack
【发布时间】:2021-08-24 14:35:13
【问题描述】:

如何将共享库 (Qt6Core.dll) 添加到 CPack?我测试了以下截图:

set(MY_DEPENDENCY_PATHS "C:/Qt/6.0.0/msvc2019_64/bin/")
install(CODE "set(MY_DEPENDENCY_PATHS \"${MY_DEPENDENCY_PATHS}\")")

install(CODE [[
  file(GET_RUNTIME_DEPENDENCIES
    LIBRARIES $<TARGET_FILE:Qt6::Core>
    RESOLVED_DEPENDENCIES_VAR _r_deps
    UNRESOLVED_DEPENDENCIES_VAR _u_deps
    DIRECTORIES ${MY_DEPENDENCY_PATHS}
  )
  foreach(_file ${_r_deps})
    file(INSTALL
      DESTINATION "${CMAKE_INSTALL_PREFIX}/lib"
      TYPE SHARED_LIBRARY
      FILES "${_file}"
    )
  endforeach()
  list(LENGTH _u_deps _u_length)
  if("${_u_length}" GREATER 0)
    message("Anzahl: ${_u_length}")
    message(WARNING "Unresolved dependencies detected!")
  endif()
]])

但它告诉我:

CMake Warning at C:/CPP/Projects/beans/build/packaging/cmake_install.cmake:89 (message):
    Unresolved dependencies detected!
  Call Stack (most recent call first):
    C:/CPP/Projects/beans/build/cmake_install.cmake:57 (include)

现在我的 /lib 目录中有超过 200 个其他共享库,但没有 Qt6Core.dll。

【问题讨论】:

  • 那么,_u_deps 变量的 content 是什么(不仅仅是它的长度)? r_deps变量的内容是什么,累积成功解析的库?
  • 我已经把 qtcore.dll 现在复制了 是错误的。我用我的可执行目标替换了它,它工作了^^。但所有其他库仍将被复制。 _r_deps 都是 Windows 库和我的 qt6core.dll。 _u_deps 以 api-ms-win 或 ext-ms-win 开头,包括 hvsifi 和 letrust.dll。是否可以只复制一个.dll?用其他方法?
  • "是否可以只复制一个 .dll?用其他方法?" - 是的,只需在file(INSTALL) 命令中指定此.dll
  • 感谢您的帮助。文件(安装)也可以工作。我回答了这个问题^^

标签: cmake cpack


【解决方案1】:

我解决了我的问题。

set(MY_DEPENDENCY_PATHS "C:/Qt/6.0.0/msvc2019_64/bin/")
install(CODE "set(MY_DEPENDENCY_PATHS \"${MY_DEPENDENCY_PATHS}\")")

install(CODE [[
  file(GET_RUNTIME_DEPENDENCIES
    LIBRARIES $<TARGET_FILE:MYPROJECT>
    RESOLVED_DEPENDENCIES_VAR _r_deps
    UNRESOLVED_DEPENDENCIES_VAR _u_deps
    DIRECTORIES ${MY_DEPENDENCY_PATHS}
    PRE_EXCLUDE_REGEXES "api-ms-" "ext-ms-"
    POST_EXCLUDE_REGEXES ".*system32/.*\\.dll"
  )
  foreach(_file ${_r_deps})
    file(INSTALL
      DESTINATION "${CMAKE_INSTALL_PREFIX}/lib"
      TYPE SHARED_LIBRARY
      FILES "${_file}"
    )
  endforeach()
  list(LENGTH _u_deps _u_length)
  if("${_u_length}" GREATER 0)
    message(WARNING "Unresolved dependencies detected!")
  endif()
]])

【讨论】:

    猜你喜欢
    • 2015-08-14
    • 1970-01-01
    • 2016-12-30
    • 2020-02-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多