【问题标题】:Force QtCreator to run "qmake" when building强制 QtCreator 在构建时运行“qmake”
【发布时间】:2012-10-04 02:48:57
【问题描述】:

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

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

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

(如何)在构建项目时总是强制 QtCreator 执行此步骤?

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

【问题讨论】:

    标签: qt-creator qmake


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      另一个肮脏的技巧,但更灵活一点:在 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 为每个构建重新运行。

      【讨论】:

      • 这正是我想要的!我还有一些步骤需要在每次构建时执行,所以每次都删除 Makefile 非常烦人。注意:这仅在 Unix/Linux 平台上有效,因为“rm”命令在 Windows 上不可用。要实现这一点,请将“qmakeforce.commands = rm -f Makefile”行更改为“qmakeforce.commands = $$QMAKE_DEL_FILE Makefile”。
      【解决方案3】:

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

      MAKEFILE = makefile_qt
      

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

      所以,对于我手动创建的 makefile,我有:

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

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

      【讨论】:

        【解决方案4】:

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

        QMAKE_CLEAN += ./Makefile
        

        这使得在执行 clean 时运行 qmake

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多