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

10
在我的一些项目中,我使用在 .pro 文件中配置的一些预构建步骤。所以每当激活时,qmake 就会执行这个步骤。
现在在 QtCreator 中,当我构建项目(包括完全重新构建整个项目)时,它并不总是运行 qmake ,因为它试图聪明地进行优化。只有在 .pro 文件已更改时才会运行它,这会导致几个问题。
另外一个常见的问题是,当您创建一个继承自 QObject 的类后,如果在该文件上运行了 qmake,它将不会注意到它,因此也不会在其上运行 moc 。通过在 QtCreator 的“Build”菜单中简单地手动运行 qmake 解决这些问题。但是,如果我忘记了这一点,有时会因此混淆编译错误,这真的很烦人。
我想过将 qmake 添加为项目配置中的 build step,但这似乎是一种解决此问题的肮脏方式。 (如何) 可以强制QtCreator在构建项目时始终执行此步骤?
4个回答

12
另一种有些不太优雅的方法,但更加灵活:在Linux/Mac上,将“touch yourprojectfile.pro”添加为构建步骤或将外部工具调用指定为“touch“*.pro”在当前项目工作目录中运行。当修改pro文件(通过touch模拟)时,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 在每个构建中重新运行。


3
这正是我在寻找的内容!我还有一些需要在每次构建时执行的步骤,所以不希望每次都删除Makefile,这非常令人烦恼。注意:此方法仅适用于Unix/Linux平台,因为Windows上没有“rm”命令。要实现此更改,请将“qmakeforce.commands = rm -f Makefile”行更改为“qmakeforce.commands = $$QMAKE_DEL_FILE Makefile”。 - Hampus

1
我所做的是创建了一个明确调用qmake的makefile。当然,这意味着我有两个makefiles,但在我的项目文件中,我有:
MAKEFILE = makefile_qt

这意味着生成的 makefile 将使用该名称。因此,对于我手动创建的 makefile,我有:
default: 
    qmake;
    ${MAKE} -f makefile_qt;

然后,我只需从QtCreator中调用常规的make命令,默认情况下将使用makefile。或者您可以保留Qt生成的makefile,并只需调用make -f makefile来调用手动创建的makefile。我忘记了makefile和Makefile的优先级,也不确定它是否总是相同的。

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

0
我在我的.pro文件中使用以下代码。
QMAKE_CLEAN += ./Makefile

这会在执行清理操作时运行qmake


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