1、在项目构建前执行命令

在项目构建前执行命令cmd 存在问题
system(cmd) 存在执行多次的问题,可以参考message函数的QMake Manual说明

优化后的表达式如下,这样此命令只会在构建前执行一次:

!build_pass:system(cmd)

2、在链接前后执行,使用QMAKE_PRE_LINK/QMAKE_POST_LINK

QMake Manual中有QMAKE_PRE_LINK/QMAKE_POST_LINK的说明。

在链接执行前执行命令cmd 在链接执行后执行命令cmd 存在问题
QMAKE_PRE_LINK += cmd QMAKE_POST_LINK += cmd 只有在源码修改导致重新链接成目标文件时才会执行

3、在构建前后插入命令

首先需要弄清楚qmake和make的协作过程:

  • qmake.exe会解析.pro文件生成makefile文件,生成makefile。
  • 之后会调用make工具进行编译链接等构建操作。

这里使用的QMake变量是QMAKE_EXTRA_TARGETS和PRE_TARGETDEPENS变量。具体用法请参考QMake Manual。
理解下面的处理过程需要了解一些makefile知识。

示例

在.pro文件中加入下面语句

# cmds
# 构造自定义生成目标对象
mybuild.target=pre_build_cmds
win32{
mybuild.commands=$$PWD/UpdatePluginLib.cmd
}else{
}
# 加入到自定义目标对象列表中
QMAKE_EXTRA_TARGETS += mybuild# 加入到构建依赖列表最前面,会最先被执行,这里必须写目标对象名称,不能是mybuild
PRE_TARGETDEPS += pre_build_cmds

查看makefile.Debug文件

可以看到目标被加入到构建依赖的最前面了。pre_build_cmd目标的定义可在makefile文件中找到。
同理如果需要在构建完成后执行一些命令,则可以使用QMake对应的变量POST_TARGETDEPS,将自定义生成目标加入到变量中:

POST_TARGETDEPS += after_build_cmds

使用场景

一般子目录项目需要先构建插件或动态库依赖,然后再将输出文件更新到最终的应用程序项目中,参与最终的构建,一般做法是写批处理脚本,然后手动双击更新。有了上述方法后,一切都可以一键构建。

总结

一般使用第三种方法,前提是需要清楚地了解Qt的构建过程,以及makefile的相关知识。

Qt开发技巧:编写.pro文件,在构建流程中加入命令行的方法相关推荐

  1. 一篇关于Qt开发技巧的文章收藏

    跨平台C++开发:10年Qt开发经验覆盖100多个Qt开发技巧!-控件新闻-慧都网 (evget.com)

  2. Qt实用技巧:ubuntu发布程序打包流程(解决插件xcb加载失败)

    若该文为原创文章,未经允许不得转载 原博主博客地址:长沙红胖子Qt的博客_CSDN博客-Qt开发,图形图像处理,OpenCV图像处理领域博主 原博主博客导航:红胖子网络科技博文大全:开发技术集合(包含 ...

  3. python删除重复值所在的行数_使用python读取txt文件的内容,并删除重复的行数方法...

    注意,本文代码是使用在txt文档上,同时txt文档中的内容每一行代表的是图片的名字. #coding:utf-8 import shutil readDir = "原文件绝对路经" ...

  4. cat查看tomcat日志 linux_linux怎么使用cat命令查看文件? linux中cat命令的使用方法

    Linux系统中查看文件内容时,可以使用cat命令来查看,但是cat命令一般只适合查看文件内容较少的文件.该怎么使用cat命令呢?下面我们就来看看详细的教程. 1.cat命令的语法格式为:cat [参 ...

  5. Python3实现从txt文件中读取指定行的方法

    Python3实现从txt文件中读取指定行的方法 本文实例讲述了Python3实现从文件中读取指定行的方法.分享给大家供大家参考.具体实现方法如下: def getline(the_file_path ...

  6. python逐行写入csv_python 实现一次性在文件中写入多行的方法

    python 实现一次性在文件中写入多行的方法 将要写入的内容 构造 进一个list 中,使用writelines()方法 一次性写入. file_w.writelines(list) file_w. ...

  7. matlab visa转c,将一个m文件转成c /cpp文件并在VC中进行编译。这种方法有个烦人的地方,每次你都需要把matla...

    将一个m文件转成c /cpp文件并在VC中进行编译.这种方法有个烦人的地方,每次你都需要把matla 2016-08-23 1 0 0 暂无评分 其他 1 积分下载 如何获取积分? 将一个m文件转成c ...

  8. VS调试:未能向文件“obj\Debug\\TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs”写入命令行。

    错误    19    未能向文件"obj\Debug\\TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs&quo ...

  9. 创建QT项目时只有.pro文件,源文件和头文件

    [问题描述] [原因分析] 问题原因:新建工程时没有选择合适的构建套件 [解决方案] 1新建文件 2.选择kits 下面这一步可以根据自己的需要选择相关的Kits 3.此时生成的文件还只有一个.pro ...

最新文章

  1. SAP WM初阶之TO报表LX10 - Evaluation of movements per storage type
  2. 5、JUC--实现 Callable 接口
  3. 04-树7 二叉搜索树的操作集(c语言实现)
  4. 2017 Multi-University Training Contest - Team 2——HDU6045HDU6047HDU6055
  5. Ansible 详解2-Playbook使用
  6. vs2010 C#链接 ACCESS数据库
  7. Mask R-CNN官方实现“又”来了!基于PyTorch,训练速度是原来2倍
  8. linux常用命令之文件管理
  9. bzoj 1799: [Ahoi2009]self 同类分布(数位DP)
  10. 金蝶凭证序时簿在哪_金蝶K3总账凭证查询序时簿能否显示何引出核算项目
  11. 最新 Linux 命令总结 大全
  12. 【数据科学家】如何成为一名数据科学家?
  13. 用WinDbg探索CLR世界 [4] 方法的调用机制
  14. 这个AI算法可以生成动漫人物-styleGAN2神经网络模型
  15. 自助订餐管理系统(小程序+后台源码+数据库)
  16. 使用RootTools实现对Android系统文件的读写
  17. 如何快速批量修改文件名
  18. 谷歌浏览器恐龙游戏开挂秘诀
  19. 当excel不够用时,如何利用Access进行数据分析?
  20. 良心推荐:看完这5部BBC神级纪录片,英语水平提升几个Level!

热门文章

  1. iOS HTML标签字符实体,转译字符串归类大全 【转载】
  2. 英语----情态动词(下)
  3. Linux 格式化磁盘命令mkfs
  4. 《当程序员的那些狗日日子》(三十六)无名的配角
  5. WF4.0 基础篇 (二十九) WorkflowInspectionServices
  6. python转为字节_将字节转换为python中的位
  7. vue——去除白色边框
  8. 中文邮件营销html模版,怎么制作邮件营销模板?— —邮件格式
  9. vba excel 退出编辑状态_VBA小常识(15)—Application对象
  10. C++中的IPv6网络程序设计