当前位置: 首页 > news >正文

CMake Qt程序打包与添加图标详细教程

为CMake编译的Qt程序打包并添加图标,虽然步骤稍多,但一步步来并不复杂。下面我将为你梳理详细流程和注意事项。

首先,我们用一个表格来总览打包和添加图标的主要步骤:

步骤关键内容注意要点
1. 准备图标文件将图片转换为ICO格式建议包含多种尺寸(如16x16, 32x32, 48x48, 256x256)以确保在不同显示环境下清晰
2. 创建资源文件 (.rc)编写.rc文件指向图标文件内容通常为:IDI_ICON1 ICON DISCARDABLE "你的图标.ico"
3. 修改CMakeLists.txt.rc文件加入编译在 add_executable 或 qt_add_executable 命令中添加 .rc 文件
4. 编译Release版本在Qt Creator中切换至Release模式并编译Release版本通常更小,且不含调试信息,适合分发
5. 使用windeployqt打包自动复制运行时依赖的Qt库和插件需要在Qt命令行中运行,并指定Release版本的可执行文件
6. 测试打包结果未安装Qt开发环境的电脑上测试这是验证打包是否成功的最终标准

下面是每个步骤的详细操作和注意事项。

🛜 详细步骤

第一步:准备图标并创建资源文件
  1. 准备图标 (ICO文件)

    • 找到或制作一个理想的图标图片(如PNG、JPG格式)。

    • 使用在线转换工具(如 bitbug.net 或 free-converter.com)将其转换为Windows可执行文件支持的 .ico 格式。

    • 建议:为确保图标在不同场景(如桌面、任务栏、资源管理器)显示清晰,ICO文件最好包含多种尺寸,例如 16x16, 32x32, 48x48, 256x256

  2. 创建RC资源文件

    • 在你的CMake项目根目录下,新建一个文本文件。

    • 输入以下内容(假设你的图标文件名为 my_app_icon.ico):

      rc

      IDI_ICON1 ICON DISCARDABLE "my_app_icon.ico"
    • 将文件保存,并命名为 app_icon.rc (文件名可自定义,但扩展名必须是 .rc)。

    • 重要:确保 my_app_icon.ico 文件与 app_icon.rc 文件放在同一目录下,或者在上述代码中使用正确的相对或绝对路径。

第二步:修改 CMakeLists.txt

打开你的 CMakeLists.txt 文件,进行如下修改:

  1. 添加RC文件到源文件列表:找到定义可执行文件的部分(通常是 add_executable 或 qt_add_executable 命令),将刚才创建的 .rc 文件添加到源文件列表中。

    cmake

    # 如果是 add_executable
    add_executable(YourAwesomeAppmain.cppmainwindow.cppmainwindow.h# ... 其他源文件 ...app_icon.rc  # 添加这行,引用你的.rc文件
    )# 或者如果你使用 qt_add_executable (Qt6推荐)
    qt_add_executable(YourAwesomeAppMANUAL_FINALIZATION${PROJECT_SOURCES}app_icon.rc  # 添加这行,引用你的.rc文件
    )

  2. (可选) 设置Windows可执行文件属性:这有助于确保CMake在处理可执行文件时考虑到Windows平台。

    cmake

    set_target_properties(YourAwesomeApp PROPERTIESWIN32_EXECUTABLE TRUE
    )

  3. 保存文件:修改完成后保存 CMakeLists.txt

第三步:编译Release版本

Qt Creator默认可能使用Debug模式编译,我们需要切换至Release模式以生成更小、更快的可执行文件,用于分发。

  1. 确保Qt Creator处于"编辑"模式:这样你才能看到完整的构建选项。

  2. 切换构建套件(Kit):确认Qt Creator左下角选择的构建套件(Kit)是可用且包含Release配置的(例如 "Desktop Qt 5.15.2 MinGW 64-bit")。

  3. 切换到Release模式

    • 点击Qt Creator左侧的"项目"按钮(或按 Ctrl+5),进入项目模式。

    • 在"构建和运行"(Build & Run)> "构建"(Build)设置中,找到"构建配置"(Build configuration)或类似的选项。

    • 从下拉菜单中选择"Release"。

    • 注意:如果你在这里看不到Release选项,很可能是因为使用的CMake生成器是单配置生成器(如"NMake Makefiles")。这种情况下,你需要:

      • 为Release构建单独创建一个构建目录(例如 build-release)。

      • 在该目录中打开终端(命令行),执行 cmake -DCMAKE_BUILD_TYPE=Release <你的项目源码路径> 来配置项目。

      • 然后在Qt Creator中通过"文件" → "打开文件或项目",打开这个新构建目录下的 CMakeCache.txt 文件。

  4. 编译项目:在Qt Creator中,点击左下角的"构建"按钮(或按 Ctrl+B)来编译Release版本的可执行文件。编译成功后,可执行文件通常位于项目构建目录的 release 子文件夹下。

第四步:使用 windeployqt 打包

编译生成的.exe文件不能单独运行,它依赖于许多Qt的库和插件。windeployqt 工具可以自动帮你收集这些依赖。

  1. 打开Qt命令行:在Windows开始菜单中找到并打开对应你编译所用Kit的"Qt命令行"(例如 "Qt 5.15.2 (MinGW 8.1.0 64-bit)")。这很重要,因为它设置了正确的环境变量。

  2. 导航到.exe所在目录:在Qt命令行中,使用 cd 命令切换到包含你的Release版.exe文件的目录。

    bash

    cd /d path\to\your\build-release\release
  3. 运行windeployqt

    bash

    windeployqt --release YourAwesomeApp.exe

    运行后,它会自动将所需的Qt库、插件等文件复制到当前目录。

  4. 手动添加其他依赖:如果你的项目还使用了非Qt的第三方库(如OpenCV、数据库驱动等),windeployqt 不会处理它们,你需要手动将这些额外的DLL文件复制到打包目录中。

第五步:测试打包结果

最终测试至关重要

  1. 将整个打包目录(包含.exe和所有依赖文件)复制到一台没有安装Qt开发环境的Windows电脑上。

  2. 直接双击运行其中的.exe文件。

  3. 如果程序能够正常启动和运行,说明打包成功。如果不能,请检查是否遗漏了某些依赖或第三方库。

⚠️ 常见问题与解决

  • 程序图标未显示或未更改

    • 原因:修改.rc文件或CMakeLists.txt后,未清理并重新编译项目。

    • 解决:在Qt Creator中,点击"构建"菜单 → "清理所有项目"(Clean All Projects),然后重新执行CMake(点击"构建"菜单 → "运行CMake"或"Configure CMake"),最后再重新编译。有时Windows资源管理器会缓存图标,重启 explorer 或电脑后生效。

  • windeployqt 命令未找到或执行报错

    • 原因:未在正确的Qt命令行中运行,或环境变量有问题。

    • 解决:确保从开始菜单启动与你编译所用Kit匹配的Qt命令行。

  • Release模式下编译失败

    • 原因:Debug和Release模式的库路径或依赖可能略有不同。

    • 解决:检查编译错误信息,确保所有依赖库都有对应的Release版本。

  • 运行打包后的程序提示缺少.dll

    • 原因:依赖未完全收集,尤其是非Qt的第三方库。

    • 解决:根据错误提示,手动找到并复制缺失的.dll文件到打包目录。可以使用 Dependency Walker 或 Visual Studio 的 dumpbin /dependents 命令来查看.exe的依赖。

  • RC1107错误

    • 原因:处理.rc文件时出错。

    • 解决:确保.rc文件编码正确(通常使用ANSI),并且图标路径无误。极少数情况下,可能需要手动使用Windows SDK中的rc.exe编译.rc文件为.res文件,然后在CMake中链接该.res文件。

💎 高级选项与后续步骤

  • 添加版本信息:你还可以在 .rc 文件中添加更详细的版本、公司、版权等信息,让.exe的属性更加完整。

  • 制作安装程序:对于更专业的分发,可以考虑使用 Inno Setup 或 NSIS 等免费工具将打包好的文件夹制作成标准的Windows安装程序(.exe或.msi),这可以提供更好的用户体验。

  • 打包成单个EXE:使用 Enigma Virtual Box 等工具,可以将主程序和所有依赖项打包成一个单独的.exe文件,方便分发和使用。


文章转载自:

http://mqWHWFmY.njyxj.cn
http://5d9646Xz.njyxj.cn
http://Rre3pD1y.njyxj.cn
http://LRQtUizq.njyxj.cn
http://NrGv0op1.njyxj.cn
http://XGJQwnvs.njyxj.cn
http://EDgucdch.njyxj.cn
http://JgVjHj1j.njyxj.cn
http://Cl5LHmD4.njyxj.cn
http://W78ewj4e.njyxj.cn
http://ioFU4Pfg.njyxj.cn
http://k2pEiVrd.njyxj.cn
http://Hky0hdGH.njyxj.cn
http://2eequZgN.njyxj.cn
http://FsYUpNwG.njyxj.cn
http://zTSUfocr.njyxj.cn
http://tjP5AQBp.njyxj.cn
http://xVo6CX7a.njyxj.cn
http://qeWtF4Rj.njyxj.cn
http://rRHe75FV.njyxj.cn
http://HvfSDKf2.njyxj.cn
http://wmXBuvLu.njyxj.cn
http://RvA7vlkg.njyxj.cn
http://IqhXiTGW.njyxj.cn
http://fSI90tML.njyxj.cn
http://bXHhaLw7.njyxj.cn
http://kTW8hk4Z.njyxj.cn
http://RIknHGqU.njyxj.cn
http://Vs4A5eM0.njyxj.cn
http://mEtj81ae.njyxj.cn
http://www.dtcms.com/a/375193.html

相关文章:

  • 【MySQL】mysql-connector-cpp使用
  • Oracle RAC认证矩阵:规避风险的关键指南
  • CTF-Web手的百宝箱
  • Django高效查询:values_list实战详解
  • Redis核心数据结构
  • 海外代理IP平台Top3评测:LoongProxy、神龙动态IP、IPIPGO哪家更适合你?
  • 开发避坑指南(43):idea2025.1.3版本启动springboot服务输入jvm参数解决办法
  • Vue3入门到实战,最新版vue3+TypeScript前端开发教程,笔记03
  • 四元数 (Quaternion)与李群SE(3)知识点(1)
  • 【Java】NIO 简单介绍
  • Qt从小白到进阶:完整学习路线与资源指南(补充)
  • 结合大数据知识体系对仓库建模方法总结
  • AI 辅助文档生成:从接口注释到自动化 API 文档上线
  • Day 18: 多模态大模型专项 - 理论深度与面试精通之路
  • Flink Checkpoint失败问题分析与解决方案
  • Flyway:一款免费开源的数据库变更管理工具
  • 如何开发一个教育性质的多线程密码猜测演示器
  • 基于MATLAB的线性判别分析(LDA)人脸识别实现
  • iOS现有项目采用混合工程方式集成RN0.77.3版本
  • 软件设置linux时区,Linux设置和修改时间与时区
  • 系统架构设计师备考第18天——信息安全基础知识
  • 嵌入式系统学习Day36(简单的网页制作)
  • 【人工智能99问】GPT4与QWen3的对比(39/99)
  • 计组中央处理器刷题
  • 熊大熊二与糖果2
  • 元宇宙与零售业变革:沉浸式体验重构消费全链路
  • 运筹学——对偶单纯形法,目标函数系数的敏感性分析
  • 考研复习-计算机网络-第四章-网络层
  • 《UE5_C++多人TPS完整教程》学习笔记49 ——《P50 应用瞄准偏移(Applying Aim Offset)》
  • 微信小程序罗盘功能开发指南