强制QtCreator在构建时运行"qmake"

lee*_*mes 8 qmake qt-creator

在我的一些项目中,我使用.pro文件中配置的一些预构建步骤.因此,qmake无论何时激活,都会执行此步骤.

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

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

(如何)我可以强迫QtCreator做到这一步总是建立一个项目是什么时候?

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

Mar*_*tin 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
Run Code Online (Sandbox Code Playgroud)

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

  • 这正是我想要的!我也有一些步骤需要在每个版本中执行,因此没有每次删除Makefile都是很烦的。注意:这仅在Unix / Linux平台上有效,因为'rm'命令在Windows上不可用。为此,将“ qmakeforce.commands = rm -f Makefile”行更改为“ qmakeforce.commands = $$ QMAKE_DEL_FILE Makefile”。 (2认同)

小智 1

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