首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使CPACK包含第三方DLL到安装程序中?

如何使CPACK包含第三方DLL到安装程序中?
EN

Stack Overflow用户
提问于 2022-01-16 08:39:09
回答 1查看 543关注 0票数 1

我编写了一个CMakeLists.txt,如下所示:

代码语言:javascript
运行
复制
cmake_minimum_required (VERSION 3.22)

project(tutorial)

set(wxWidgets_CONFIGURATION mswu)

find_package(wxWidgets REQUIRED COMPONENTS net core base)
include(${wxWidgets_USE_FILE})
add_executable(tutorial main.cpp)
target_link_libraries(tutorial ${wxWidgets_LIBRARIES})

install(TARGETS tutorial DESTINATION bin)

include(InstallRequiredSystemLibraries)
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
set(CPACK_PACKAGE_VERSION_MAJOR "0")
set(CPACK_PACKAGE_VERSION_MINOR "1")
include(CPack)

正如您可能猜到的,这是WxWidgets应用程序。

看下面。它包括InstallRequiredSystemLibraries和CPack。

使用这个cmake,我已经生成了一个NSIS安装程序“教程-0.1.1-win64.exe”。但是这个安装程序只安装项目二进制文件和一些运行时库。它没有安装任何WxWidgets库。因此,该项目二进制文件无法在未安装WxWidgets库的其他系统上运行。

我想让NSIS安装程序也安装WxWidgets DLL库。我怎么能做到呢?

看见!需要安装这些二进制文件!但是NSIS安装程序没有安装wxbase315ud_vc14x_x64.dll和wxmsw315ud_core_vc14x_x64.dll

我正在Windows 10上工作

我不想静态地链接到WxWidgets库。我想让它与共享库动态链接。

EN

回答 1

Stack Overflow用户

发布于 2022-01-18 12:42:30

以前曾就类似的问题进行过一次讨论:

Including external libraries in cpack output

我试过这样做,效果很好:

代码语言:javascript
运行
复制
cmake_minimum_required (VERSION 3.22)

project(tutorial)

if(CMAKE_BUILD_TYPE MATCHES Release)
  message("release mode")
  set(wxWidgets_CONFIGURATION mswu)
else()
  message("debug mode")
  set(wxWidgets_CONFIGURATION mswud)
endif()

find_package(wxWidgets REQUIRED COMPONENTS net core base)
include(${wxWidgets_USE_FILE})
add_executable(tutorial main.cpp)
target_link_libraries(tutorial ${wxWidgets_LIBRARIES})
    
install(TARGETS tutorial DESTINATION bin)
if(CMAKE_BUILD_TYPE MATCHES Release)
  install(FILES ${wxWidgets_LIB_DIR}/wxbase315u_vc_custom.dll DESTINATION bin)
  install(FILES ${wxWidgets_LIB_DIR}/wxmsw315u_core_vc_custom.dll DESTINATION bin)
else()
  install(FILES ${wxWidgets_LIB_DIR}/wxbase315ud_vc_custom.dll DESTINATION bin)
  install(FILES ${wxWidgets_LIB_DIR}/wxmsw315ud_core_vc_custom.dll DESTINATION bin)
endif()

include(InstallRequiredSystemLibraries)
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
set(CPACK_PACKAGE_VERSION_MAJOR "0")
set(CPACK_PACKAGE_VERSION_MINOR "1")
include(CPack)

听着,我在下面添加了以下内容:

代码语言:javascript
运行
复制
if(CMAKE_BUILD_TYPE MATCHES Release)
  install(FILES ${wxWidgets_LIB_DIR}/wxbase315u_vc_custom.dll DESTINATION bin)
  install(FILES ${wxWidgets_LIB_DIR}/wxmsw315u_core_vc_custom.dll DESTINATION bin)
else()
  install(FILES ${wxWidgets_LIB_DIR}/wxbase315ud_vc_custom.dll DESTINATION bin)
  install(FILES ${wxWidgets_LIB_DIR}/wxmsw315ud_core_vc_custom.dll DESTINATION bin)
endif()

它能按我的意愿工作!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70728518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档