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

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 += cmdQMAKE_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的相关知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++清空输入缓冲区_干货 | C++的输入输出方法

C和C并没有将输入与输出实现在语言中,而是在类库中实现。作为C的超集,C继承了C的输入输出方法。同时将输入与输出视为字流。流充当了程序和流源流目标之间的桥梁。本文将介绍C的输入输出方式,并且浅谈C与C均有的输入输出方式对C有一定学习的同…

Qt应用程序发布:Qt应用程序添加版本版权生产商等信息

设置方法 在QMake Manual手册中搜索关于QMAKE_TARGET内容可以看到有如下QMake变量: QMAKE_TARGET_COMPANY:用于指定生产商QMAKE_TARGET_DESCRIPTION:用于描述应用程序QMAKE_TARGET_COPYRIGHT:用于声明版权QMAKE_TARGET_PRODUCT&…

stl源码剖析_STL源码剖析 阅读笔记(二)allocator

一、空间分配器 allocator从使用上看,空间分配在任何语言的任何组件都不需要我们去过多关心,因为语言、组件的底层肯定都比较完整的做了这件事情。从实现上看,学习 allocator 的原理在源码学习中是首当其冲。因为没有空间分配,则无…

easyexcel将对象处理为多列,自增序列

概述 主要记录在开发中遇到的问题:使用easyexcel导出excel,一般数据都是保存在数据库中,如果查询返回的是一个实体类,且里面有嵌套的实体类对象,这时导出的时候要先对查询出的数据进行业务逻辑处理,让它符…

python做excel表格代码_python操作excel表格

我们在写测试用例的时候,是创建一个表格.xlsx,然后把各种条件加到这张表格中去,所以,如何对excel表格操作,是相当重要的一环,那么,接下来,这篇博客就直接教会大家如何通过python去处…

Windows 查看程序ip地址(面对小白)

前言:Windows自带资源管理器可以查看程序的IP地址。下面以微信通话为例,详细步骤如下(面向小白): 打开任务管理器 打开方法(以下方法都可以): 键盘按住 【ctrl】 【alt】 【delete】 ,选择【任务管理器】Windows 10 以下系统…

【转】C#中相同不同程序集存在相同的命名空间的时候的冲突解决办法

快速解决办法描述描述: 1.将相同命名空间的不同程序集分别进行取别名:【具体操作:右击相同程序的引用,在别名上修改,默认的为global】。 2.调用:在所在调用文件里面最前面写 extern alias 别名,然后using 别名.Names…

chrome webdriver_(最新版)如何正确移除Selenium中的 window.navigator.webdriver

摄影:产品经理产品经理的三文鱼炒饭在《一日一技:如何正确移除Selenium中window.navigator.webdriver的值》一文中,我们介绍了在当时能够正确从Selenium启动的Chrome浏览器中移除window.navigator.webdriver的方法。后来时过境迁,…

【转】2.3async中必须始终返回Task(@Ron.liang)

Asp.Net Core 轻松学-经常使用异步的你,可能需要看看这个文章 目录 前言1. 异常的发生来得太突然2. 问题所在3. 问题的解决方案前言 事情的起因是由于一段简单的数据库连接代码引起,这段代码从语法上看,是没有任何问题;但是就是莫名其妙的报…

php隐藏webshell_PHP 安全的十个必备技巧

在这篇文章中,我将尝试为你提供一些可以提高 PHP 应用程序安全性的具体步骤。我关注的是 PHP 配置本身,所以我们不会讨论 SQL 注入、HTTPS 或其他与 PHP 无关的问题。我将使用我的 docker-entrypoint.sh 脚本中的 bash 行来说明示例,但当然你…

aop实现原理_Java:由浅入深揭开 AOP 实现原理

点击上方“Java专栏”,选择“置顶或者星标”第一时间阅读精彩文章!1、☞ 程序员进阶必备资源免费送「21种技术方向!」 点击查看☜2、☞ 《Java面试手册》.PDF 点击查看作者:马佩juejin.im/post/5bf4fc84f265da611b57f906概述&a…

【转】C#进阶系列——WebApi 接口参数不再困惑:传参详解

阅读目录 一、get请求 1、基础类型参数2、实体作为参数3、数组作为参数4、“怪异”的get请求二、post请求 1、基础类型参数2、实体作为参数3、数组作为参数4、后台发送请求参数的传递三、put请求 1、基础类型参数2、实体作为参数3、数组作为参数四、delete请求五、总结正文 前…

【转】01Teams的前世今生

说到Teams,这到底是一个什么产品?有人说它是团队协作工具,有人说它是云视频系统,有人说它是Hub,还有人说它是微软有史以来发展最快的一个产品,还有人说它完全是一个高效办公神器。其实都是对的。 Teams集成…

oracle insert 当前时间_Oracle知识点总结

目录1、Oracle的安装与下载2、基础查询3、条件查询 1)对比运算符 2)逻辑运算符 3)模糊查询 4)排序4、函数 1)数值函数 2)字符函数 3)时间日期函数 4)转换函数 5)通用函数5、聚合函数6、分组查询在学习Oracle之前,需要先有一定的数据库基…

【转】C#各类控件的输入输出(思维导图、知识点分析、案例解析)

第六周学习笔记—C#各类控件的输入输出 1.思维导图 知识点汇总: 着重介绍几个常用控件: 数据显示控件 DataGridView控件 列设置 a)、列的宽度铺满这个控件 设置如下:把AutoSizeColumnsModeFill;//可以在属性窗口中设置 b)、列名居中 代…

sqlserver连接字符串_10分钟使用EF Core连接MSSQL数据库

(给DotNet加星标,提升.Net技能)转自:Ron.liangcnblogs.com/viter/p/10243577.html前言在 .NET Core 2.2中Microsoft.AspNetCore.App 默认内置了EntityFramework Core 包,所以在使用过程中,我们无需再从NuGet仓库单独应用 EFCore 包…

【转】ADO.Net之SqlConnection、 Sqlcommand的应用学习心得(思维导图,知识解析,案例分析)

ADO.Net之SqlConnection、 Sqlcommand的应用 一、思维导图: ADO.NET与SQL连接: 二、知识点介绍: SqlConnection和Sqlcommand都是组成数据提供程序的类。 SqlConnection使用它来建立和数据库的连接,Sqlcommand使用它执行SQL命令…

professional中文_Microsoft office 2007 简体中文版

点击蓝字 关注小白软件名称:Microsoft office 2007软件语言:简体中文软件大小:0.67GB安装环境:Win10/8/7下载链接:https://pan.baidu.com/s/1DybozQ-rn-t2s2EC7FrvFw 提取码:zoa0安装步骤1、解压安装包&…

【转】设计模式 ( 十七) 状态模式State(对象行为型)

设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理。最直接的解决方案是将这些所有可能发生的情况全都考虑到。然后使用if... ellse语句来做状态判断来进行不同情况的处理。…

【OSG学习】准备开发调试环境

环境 本人当前使用的环境是VS2013 Ultimate Update5 WIN10。 OSG编译安装 下载编译OSG源码不要克隆github上的源码,而是下载稳定版本的OSG源码进行编译。因为github上的源码处于开发阶段,我们应该优先选择稳定版本,我使用的是OpenSceneGr…