强制QtCreator在构建时运行“qmake”

问题描述 投票:6回答:4

在我的一些项目中,我使用.pro文件中配置的一些预构建步骤。所以qmake会在激活时执行此步骤。

现在在QtCreator中,当我构建时(也完全重建整个项目时),它并不总是运行qmake,因为它试图变得聪明并优化它。它仅在.pro文件更改时运行它,从而导致多个问题。

另一个常见问题是,当你在该文件上运行qmake之后创建一个继承自QObject的类时,它不会注意到它,因此不会在其上运行moc。只需通过QtCreator中的“Build”菜单手动运行qmake即可解决这些问题。但是,如果我忘了这一点,我有时会因为这个而得到编译错误而感到困惑,这真的很烦人。

(如何)在构建项目时,我是否可以强制QtCreator执行此步骤?

我想在项目配置中添加qmake作为构建步骤,但这似乎是一个解决这个问题的肮脏黑客。

qt-creator qmake
4个回答
8
投票

另一个肮脏的黑客,但更灵活一点:在Linux / Mac上添加“touch yourprojectfile.pro”作为构建步骤或为sth分配外部工具调用。喜欢触摸“* .pro”在您当前的项目工作目录中运行。当pro文件被更改(通过触摸模仿)时,执行qmake。不是更清洁,但外部工具和热键解决方案比将qmake添加到每个项目的每个项目的构建阶段更灵活。

更新:我终于找到了一个完全令人满意的解决方案。在专业文件中添加:

  qmakeforce.target = dummy
  qmakeforce.commands = rm -f Makefile ##to force rerun of qmake
  qmakeforce.depends = FORCE
  PRE_TARGETDEPS += $$qmakeforce.target
  QMAKE_EXTRA_TARGETS += qmakeforce

这将删除生成的Makefile,从而强制qmake重新运行每个构建。


1
投票

我认为你最好的选择是自定义你的QtCreator。这可以通过为QtCreator编写一个插件来完成,或者你可以改变一个名为Qt4ProjectManager的插件的源代码,然后自己构建它。这可能很复杂,但可以是一种解决方案。


1
投票

我所做的是创建一个显式调用qmake的makefile。当然,这意味着我有两个makefile,但在我的项目文件中,我有

MAKEFILE = makefile_qt

这意味着生成的makefile将具有该名称。

因此,对于我手动创建的makefile,我有:

default: 
    qmake;
    ${MAKE} -f makefile_qt;

然后,从QtCreator,我只调用常规make,默认为makefile。或者您可以按原样保留Qt生成的makefile,只需调用make -f makefile来调用手动创建的makefile。我忘了哪个有优先级,makefile或Makefile,我不确定它是否总是一样的。


0
投票

我在.pro文件中使用以下代码。

QMAKE_CLEAN += ./Makefile

这样可以在执行clean时运行qmake

© www.soinside.com 2019 - 2024. All rights reserved.