2012-10-13 61 views
6

在我的一些项目中,我使用了.pro文件中配置的一些预构建步骤。因此,qmake将在激活时执行此步骤。强制QtCreator在构建时运行“qmake”

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

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

(How)可以强制QtCreator做这一步吗总是建设项目时?

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

回答

1

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

6

另一个肮脏的黑客,但更灵活一点:在Linux/Mac上添加“touch yourprojectfile.pro”作为构建步骤或分配外部工具调用给某事。像触摸“* .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 

这删除生成的Makefile的力量因而qmake将重新运行每次构建。

+0

这正是我一直在寻找的!我还有一些步骤需要在每次构建时执行,因此每次都不会删除Makefile,这非常烦人。注意:这仅在Unix/Linux平台上有效,因为'rm'命令在Windows上不可用。为了实现这种改变,将“qmakeforce.commands = rm -f Makefile”行改为“qmakeforce.commands = $$ QMAKE_DEL_FILE Makefile”。 – Hampus

1

我所做的是创建一个明确调用qmake的makefile。当然,这意味着我有两个生成文件,但在我的项目文件,我有

MAKEFILE = makefile_qt 

这意味着生成的makefile文件将有名称。

所以,我手动创建生成文件中,我有:

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

然后,从QtCreator,我只需要调用经常化妆,这将默认为makefile文件。或者你可以保持Qt生成的makefile不变,只需调用make -f makefile来调用手动创建的makefile即可。我忘记了哪些具有优先权,makefile或Makefile,我不确定它是否总是相同。