2012-10-13 92 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,我不確定它是否總是相同。