如何在QT的.pro文件编译完成后执行shell命令?

20

如果我想执行chmod命令、执行输出的二进制文件或进行其他操作,我需要在.pro文件中做哪些更改。


1
这可以通过QMAKE_POST_LINK完成吗?我自己从未使用过,所以我不会将其作为答案。也许值得一试? - Bart
我尝试了 QMAKE_POST_LINK,它运行良好! - camino
4个回答

27

我遇到了类似的问题。 我想要一个特殊的工具(版本控制器),每次执行Makefile时都可以运行代码。 这是解决方案:

(在Qmake手册中阅读,配置qmake的环境,部分:自定义Makefile输出)

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

mytarget.target = .buildfile
mytarget.commands = touch $$mytarget.target

QMAKE_EXTRA_TARGETS += mytarget

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

POST_TARGETDEPS += mytarget

希望这能有所帮助。

最好的问候,
D


12
在这种情况下,touch命令将在编译完成且链接之前执行。如果想在链接后执行touch命令,则适用于QMAKE_POST_LINK。 - camino
你难道不想要 mytarget.depends = FORCE 吗? - Keith Russell

1

另一种按照给定顺序制作事物的方法是使用空的“超级”目标:

super.depends = target_pre first target_post
QMAKE_EXTRA_TARGETS += super

first是默认的qmake目标,而target_pretarget_post则是一些自定义目标。现在运行make super就可以完成任务。

编辑:看起来在Qt的最新版本中,依赖项的构建是并行运行的,因此这种解决方案将不起作用。


0

4
不好的回答。如果您可以通过QMake实现目标,请不要乱动.pro用户设置。 - BuvinJ

0

正确的答案取决于您想要什么以及何时需要。然而,正如在此之前发布的一些评论中所看到的那样,QMAKE_POST_LINK可能是您想要的,而不是POST_TARGETDEPS

请查看相关帖子: QMake:构建后执行脚本

首先,当您使用POST_TARGETDEPS时,在Windows中它会在您的exe创建之前(或在Linux中重新创建之前)触发!QMake的工作方式取决于平台和编译器。

当我需要在重新编译exe时进行一些“符号处理”时,POST_TARGETDEPS在Windows(使用mingw)和Linux(使用gcc)中都给我带来了问题。在Windows中,它过早地执行了我的脚本,在Linux中,它在我修改exe后覆盖了它(即在我的外部脚本中剥离它后,将我的调试信息添加回exe)。然而,QMAKE_POST_LINK在这两种情况下都完美地工作。相比之下,它也更加简短、清晰明了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接