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 进行许可。
评论
此页目录
cmake调用windeployqt实现自动打包qt的dll文件