关于qmake:在QT中从.pro编译完成后如何执行shell命令?

How to execute shell command after compile finished from .pro in QT?

如果要执行chmod命令,执行输出二进制文件或执行某些其他操作,必须对.pro文件进行哪些更改。


我有一个类似的问题。我希望每次执行Makefile时都使用特殊的工具(版本器)来运行代码。解决方法如下:

(将在《 Qmake手册》中的"配置qmake的环境"部分:"自定义Makefile输出"中进行阅读)

创建您自己的Makefile目标。指定命令等。

1
2
3
4
mytarget.target = .buildfile
mytarget.commands = touch $$mytarget.target

QMAKE_EXTRA_TARGETS += mytarget

这样,您就有了一个额外的目标,例如可以使用make mytarget调用。如果要将其与实际的构建目标绑定在一起,则必须添加:

1
POST_TARGETDEPS += mytarget

希望能有所帮助。

最好的祝福
d


如果您使用的是Qt Creator,则可以在"项目"面板中添加自定义构建步骤:http://doc.qt.nokia.com/qtcreator-2.1/creator-build-settings.html#adding-custom-build-steps


按照给定顺序进行操作的另一种方法是使用空的"超级"目标:

1
2
super.depends = target_pre first target_post
QMAKE_EXTRA_TARGETS += super

其中first-是默认的qmake目标,而target_pretarget_post是一些自定义目标。现在,make super可以执行此操作。

编辑:看起来在依赖关系的最新版本的Qt中运行在paralell中,所以此解决方案将无法正常工作。


正确的答案取决于您想要的是什么,何时使用。但是,正如以前在此处发表的一些评论中所见,QMAKE_POST_LINK可能是您想要的,而不是POST_TARGETDEPS

查看此相关文章:
QMake:构建后执行脚本

例如,当您使用POST_TARGETDEPS会在创建exe之前(在Windows中)或在重新创建exe之前(在Linux中)将其关闭! QMake的工作方式取决于平台和编译器。

重新编译后,我需要在exe上执行一些"符号处理"。 POST_TARGETDEPS给我Windows(使用mingw)和Linux(使用gcc)的问题。在Windows中,它会过早执行我的脚本,而在Linux中,它会在我修改了exe后改写我的exe文件(即在我将其在外部脚本中删除后,将调试信息重新添加到exe文件中)。 QMAKE_POST_LINK在两种情况下均能完美工作。它也简短,甜美,相比之下更清晰!