cmake调用windeployqt实现自动打包qt的dll文件

TwoSix Lv3

最近在编写一个 Qt 项目,发现 Qt 在 windows 部署有一个很方便的工具 windeployqt.exe,遂研究如何在 cmake 里调用这个工具,在 install 时执行,实现全自动化的发布构建。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
# 1. 找到qmake的执行路径(Qt5请更换为你实际的Qt版本)
get_target_property(qmake_exec_filepath Qt5::qmake IMPORTED_LOCATION)
# 2. 找到Qt的bin文件夹
get_filename_component(qt_exec_bin_dir "${qmake_exec_filepath}" DIRECTORY)
# 3. 找到windeployqt的路径
find_program(windeployqt_exec_filepath windeployqt HINTS "${qt_exec_bin_dir}")
# 4. 在控制台执行命令
add_custom_command(TARGET app POST_BUILD
COMMAND "${windeployqt_exec_filepath}" "--dir" "${CMAKE_INSTALL_PREFIX}/你的二进制文件存放的文件夹" "$<TARGET_FILE:你的target名>"
COMMENT "Running windeployqt..."
)

简单来说思路就是:通过库文件找到 qmake 的路径 -> 通过 qmake 找到 bin 的路径 -> 通过 bin 找到 windeployqt 的路径 -> 就可以在控制台调用 windeployqt 执行命令了。

--dir 是指定输出的目录,我使用 install 进行打包,如果不指定的话会在 build 目录下执行。


如果没有像 qt 一样这么方便的工具怎么办?另外附上一段另外写的,查找其他库的 dll 并复制过来的代码:

1
2
3
4
5
6
7
8
# 获取到库的bin路径
set(VTK_DLL_PATH ${VTK_DIR}/../../../bin)
# 搜索bin下的dll
file(GLOB VTK_DLLS ${VTK_DLL_PATH}/*.dll)
# 对所有dll依次install
foreach(DLL ${VTK_DLLS})
install(FILES ${DLL} DESTINATION bin)
endforeach()
  • 标题: cmake调用windeployqt实现自动打包qt的dll文件
  • 作者: TwoSix
  • 创建于 : 2024-06-27 20:11:05
  • 更新于 : 2024-07-04 23:52:28
  • 链接: https://twosix.page/2024/06/27/cmake调用windeployqt实现自动打包qt的dll文件/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.2.2