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



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

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

还有一个常见的问题是,当您在该文件上运行qmake之后使一个类从QObject继承时,它不会注意到它,因此不会在它上运行moc。只需通过QtCreator中的"Build"菜单手动运行qmake即可解决这些问题。但如果我忘记了这一点,我有时会被由此产生的编译错误弄糊涂,这真的很烦人。

(如何)在构建项目时强制QtCreator执行此步骤始终

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

另一个肮脏的破解方法,但更灵活一点:在Linux/Mac上,添加"touchyourprojectfile.pro"作为构建步骤,或者为当前项目工作目录中运行的诸如touch"*.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为每个构建重新运行。

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

我所做的是创建一个显式调用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哪个有优先级,我不确定它是否总是一样的。

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

QMAKE_CLEAN += ./Makefile

这使得无论何时执行都可以运行qmake

最新更新