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

完整教程:Qt开发经验 --- qmake执行系统命令(15)

更多精彩内容
内容导航
Qt开发经验

1 与其它方法的比较

方法优点缺点
system()灵活,可执行任意命令平台依赖,错误处理困难
INSTALLS跨平台,Qt原生支持仅用于安装阶段,使用较复杂
QMAKE_POST_LINK构建后执行,适合拷贝平台依赖,仅在链接后执行
QMAKE_PRE_LINK 构建后执行,适合拷贝平台依赖,仅在链接前执行

2 程序依赖文件自动安装(INSTALLS)

3 链接阶段开始之前执行自定义命令(QMAKE_PRE_LINK )

QMAKE_PRE_LINK 是 qmake 提供的变量,用于在链接阶段开始之前执行自定义命令。

基本概念

  • 作用时机:在所有源文件编译完成之后,但在链接过程开始之前执行
  • 执行环境:作为 Makefile 中链接步骤之前的预处理命令运行
  • 平台相关:命令语法需要匹配目标平台(Windows使用cmd命令,Unix/Linux使用shell命令)

4 链接阶段完成后执行自定义命令(QMAKE_POST_LINK)

QMAKE_POST_LINK 是 qmake 提供的一个重要变量,用于在链接阶段完成后执行自定义命令。

基本概念

示例:将crashpad文件夹中文件拷贝到DESTDIR路径下;

QMAKE_POST_LINK += xcopy /D /F /E /Y \"$${PWD}/vcpkg_installed/x64-windows/tools/crashpad\" \"$${DESTDIR}\"

各部分详细说明

  1. QMAKE_POST_LINK
    • qmake 变量,在链接完成后执行指定命令
    • 使用 += 操作符将命令追加到现有命令列表
  2. xcopy
    • Windows 系统下的文件和目录复制命令
    • copy 命令功能更强大,支持目录递归复制
  3. 参数详解:
    • /D - 只复制源文件中较新或目标不存在的文件(日期比较)
    • /F - 显示每个被复制文件的完整源路径和目标路径
    • /E - 复制所有子目录,包括空目录
    • /Y - 覆盖现有文件时不提示确认
    • /Q - 复制时不显示文件名
    • /S - 复制目录和子目录,但不包括空目录
    • /H - 复制隐藏和系统文件
    • /K - 复制属性信息
    • /R - 覆盖只读文件
    • /I - 如果目标不存在且正在复制多个文件,则假定目标是目录
  4. 源路径:\"$${PWD}/vcpkg_installed/x64-windows/tools/crashpad\"
    • $${PWD} - 当前项目工作目录
    • vcpkg_installed/x64-windows/tools/crashpad - vcpkg 安装的 crashpad 工具目录
    • 双引号防止路径中空格导致的问题
  5. 目标路径:\"$${DESTDIR}\"
    • $${DESTDIR} - qmake 定义的目标输出目录
    • 通常是可执行文件的输出位置

执行时机和目的

  • 执行时机:整个项目编译链接完成后自动执行
  • 主要目的:将 crashpad 相关工具文件复制到可执行文件所在目录
  • 实际效果:确保生成的程序能够找到所需的 crashpad 工具(如 crashpad_handler.exe)

使用场景

  1. Crash Reporting - 复制 crashpad 崩溃报告工具
  2. 依赖文件部署 - 将运行时需要的工具文件复制到输出目录
  3. vcpkg 集成 - 处理通过 vcpkg 安装的第三方工具文件

注意事项

  1. 路径存在性:确保源目录 vcpkg_installed/x64-windows/tools/crashpad 存在
  2. 权限要求:需要有读取源目录和写入目标目录的权限
  3. 平台限制xcopy 是 Windows 特有命令,不适用于 Unix/Linux 系统
  4. 转义字符:路径中的双引号需要使用反斜杠转义

5 qmake中使用system()执行系统命令

在qmake中,system()函数用于执行系统命令,常用于在构建过程中执行外部命令,包括文件拷贝操作。

使用场景

  1. 文件拷贝
  2. 目录操作
  3. 外部工具调用
  4. 构建前/后处理

使用示例

# windows复制文件
system(xcopy /D /F /Y \"$${PWD}/config.ini\" \"$${DESTDIR}\")
# linux复制单个文件
system(cp $$PWD/config.ini $$DESTDIR/)
# windows查看文件
system(dir)
# linux查看文件
system(ls -l)


http://www.jsqmd.com/news/399/

相关文章:

  • YOLO入门理解 评估指标
  • 清除win+r“运行”对话框中的历史记录
  • [ICPC 2024 Yokohama R] Peculiar Protocol
  • YOLO入门理解 基础概念
  • The 2025 ICPC Asia East Continent Online Contest (II)(C,D,E,H,I)
  • 深入解析:不同上位开发语言、PLC下位平台、工业协议与操作系统平台下的数据类型通用性与差异性详解
  • 2022年十大Web黑客技术提名开启
  • 13. LangChain4j + 加入检索增加生成 RAG(知识库) - Rainbow
  • 实用指南:微信小程序-6-页面布局和事件绑定以及页面跳转
  • 终旅之始——2025 . 9 . 20
  • CentOS 7 源码版 PhpMyAdmin 安装指南(适配 Nginx+PHP-FPM 环境) - 教程
  • 深入理解Django Admin只读字段与保存模型的自定义操作 - 详解
  • 深度学习(视觉注意力SeNet/CbmaNet/SkNet/EcaNet)
  • 起床
  • qoj6277 Linear Congruential Generator
  • AI智能体服务优秀的平台架构设计
  • Node.js、npm 和 npx:前端开发的三剑客 - 指南
  • docker+k8s
  • 多模型适配突围:JBoltAI如何重构企业数智化转型新范式?
  • JBoltAI赋能制造业数智化转型:AI从概念到落地的Java实践
  • JBoltAI赋能医疗数智化转型:AI大模型如何重塑医疗健康新范式
  • JBoltAI多模态赋能:制造业数智化升级的新引擎
  • 深入解析:YARN架构解析:深入理解Hadoop资源管理核心
  • JBoltAI:破解Java企业级AI应用落地难题的利器
  • 直播软件开发,单例设计模式很简单吗? - 云豹科技
  • Java开发者的AI革命:如何用JBoltAI应对数智化转型挑战
  • JBoltAI:赋能Java老项目快速接入AI能力的创新之道
  • Day04 C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\David\operator Demo01-08+Doc
  • 实用指南:养老专业实训室建设方案的分级设计与人才培养适配
  • 物业企业绩效考核制度与考核体系 - 指南