9

在我的一些项目中,我使用了一些在 .pro 文件中配置的预构建步骤。所以qmake只要它被激活就会执行这个步骤。

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

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

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

我曾考虑在项目配置中添加 qmake 作为构建步骤,但这似乎是解决此问题的肮脏技巧。

4

4 回答 4

11

另一个肮脏的 hack 但更灵活一点:在 Linux/Mac 上添加“touch yourprojectfile.pro”作为构建步骤或分配一个外部工具调用。像 touch "*.pro" 在你当前的项目工作目录中运行。当 pro 文件被更改(通过触摸模拟)时,执行 qmake。不是很干净,但是外部工具加上热键解决方案比在每个项目的构建步骤中添加 qmake 更灵活。

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

  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 为每个构建重新运行。

于 2014-01-01T21:55:13.073 回答
1

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

于 2013-02-28T04:59:02.897 回答
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,我不确定它是否总是相同的。

于 2015-02-03T23:27:29.530 回答
0

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

QMAKE_CLEAN += ./Makefile

这使得qmake只要执行干净就运行。

于 2019-02-20T10:53:47.813 回答