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 += 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文件
Qt开发技巧:编写.pro文件,在构建流程中加入命令行的方法_第1张图片

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

POST_TARGETDEPS += after_build_cmds

使用场景

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

总结

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

你可能感兴趣的:(Qt开发)