如何使用CMake和Qt Creator生成可独立运行的EXE可执行文件
Qt Windows程序依赖DLL收集方案
Qt Creator运行程序时会自动将对应Qt版本的bin目录临时加入系统PATH环境变量,因此可以正常加载依赖;直接运行exe时没有对应环境变量配置,就会提示缺失DLL。
核心操作步骤
- 首先确认你编译项目使用的Qt套件版本(比如MinGW 64位、MSVC 2022 64位),必须使用对应版本的部署工具,否则会复制不兼容的依赖文件。
- 打开对应Qt版本的专属命令行终端:从Windows开始菜单找到对应Qt版本的文件夹,选择和编译套件一致的终端入口,比如
Qt 6.4.2 (MinGW 11.2.0 64-bit)。 - 执行命令切换到exe所在的生成目录,示例:
cd /d D:\build-myProject-Release\release - 执行官方部署工具命令自动收集所有依赖:
windeployqt 你的程序名称.exe- 如果项目使用了QML相关模块,需要额外加参数指定项目QML源码根目录,避免漏复制QML依赖:
windeployqt --qmldir D:\projects\myProject\qml 你的程序名称.exe
- 如果项目使用了QML相关模块,需要额外加参数指定项目QML源码根目录,避免漏复制QML依赖:
- 等待命令执行完成后,所有Qt官方依赖、编译器运行时依赖都会自动复制到exe所在目录,此时直接双击exe即可正常运行。
特殊情况处理
如果执行完windeployqt后仍提示缺失非Qt类依赖,可按以下方式处理:
- 使用Dependencies工具打开exe,查看所有缺失的依赖项,从对应SDK或编译器安装目录中找到对应DLL,复制到exe目录即可。
- 如果是MSVC编译的程序,也可以直接安装对应版本的Microsoft Visual C++ Redistributable运行库,无需单独复制MSVC运行时DLL。
CMake自动集成部署(可选)
如果需要每次编译完成后自动执行部署操作,可在项目的CMakeLists.txt中添加以下自定义命令:
if(WIN32) # 替换成你的项目目标名 set(TARGET_NAME myProject) add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND set PATH=%PATH%$<SEMICOLON>${QT_INSTALL_BINS} COMMAND windeployqt "$<TARGET_FILE:${TARGET_NAME}>" ) endif()
内容的提问来源于stack exchange,提问作者Jimmy R.T.
相关产品推荐
相关产品推荐

