2011-05-10 22 views
17

如果我想執行chmod命令,執行輸出二進制文件或執行其他操作,必須對.pro文件做出什麼更改。如何在QT中的.pro編譯完成後執行shell命令?

+1

可以通過QMAKE_POST_LINK完成嗎?從來沒有用過這個,所以我不會把它作爲答案。也許值得一看? – Bart 2011-05-10 08:22:56

+0

我試過QMAKE_POST_LINK,它效果很好! – camino 2011-05-11 02:08:42

回答

24

我有類似的問題。每次執行Makefile時,我都想要一個特殊的工具(版本控制器)來運行代碼。這裏的解決方案:

(在Qmake Manual, Configuring qmake's Environment, Section: Customizing Makefile Output讀取)

創建你自己的Makefile目標。指定命令等

mytarget.target = .buildfile 
mytarget.commands = touch $$mytarget.target 

QMAKE_EXTRA_TARGETS += mytarget 

這樣,你有一個額外的目標,你可以用make mytarget例如調用。如果你想將它綁定到實際的構建目標,你必須添加:

POST_TARGETDEPS += mytarget 

希望有所幫助。

問候
d

+8

在這種情況下,touch命令會在編譯完成和鏈接之前執行,如果要在鏈接之後執行touch,QMAKE_POST_LINK是合適的。 – camino 2011-05-11 02:45:06

0

正確的答案取決於你想要什麼,以及何時。但是,正如以前發佈的一些評論中所看到的,這裏可能是QMAKE_POST_LINK而不是POST_TARGETDEPS

退房此相關的帖子: QMake: execute script after build

首先,當您使用POST_TARGETDEPS將觸發了你的exe文件之前創建(在Windows)或之前,它是(在Linux中)重建! QMake根據平臺和編譯器的不同而有所不同。

我需要在exe文件重新編譯時做一些「符號處理」。 POST_TARGETDEPS在Windows(使用mingw)和Linux(使用gcc)中給我提供了問題。在Windows中,它過早地執行了我的腳本,並且在我修改了它之後,它在Linux中覆蓋了我的exe文件(即在我將外部腳本中的文件剝離後,將調試信息添加回到exe文件中)。然而,在這兩種情況下,QMAKE_POST_LINK都能很好地工作。它也簡短,甜美,而且比較清晰!

0

另一種方法,使在給定的順序件事就是要用空的「超級」的目標:

super.depends = target_pre first target_post 
QMAKE_EXTRA_TARGETS += super 

哪裏first - 是默認qmake的目標,並target_pretarget_post一些自定義的目標。現在make super只是做的事情。