2011-04-28 64 views
13

我有一個Makefile,它運行一個程序,它在成功時返回一個非零值,並在失敗時返回另一個非零值。我知道我可以通過在命令前加上 - 來忽略退出狀態,但這不起作用,因爲我需要知道命令是否成功。如何檢查Makefile shell調用的退出狀態?

+12

的第一步是提交錯誤報告到成功返回非零程序的維護者。 – 2011-04-28 11:13:03

+2

那麼,這個程序來自一個商業供應商,所以我懷疑他們會改變程序的行爲。 – trondd 2011-04-30 05:14:35

+0

@trondd GNU make由GNU項目開發,它不是商業的。情況正好相反:它是免費軟件。 – no92 2014-02-13 18:41:07

回答

15

您可以在同一的Makefile線的第二命令來測試返回值,使用shell變量$?包含最後返回的值。

例如與false命令顯然會停止編譯:

test: 
    /bin/false ; /usr/bin/test "$$?" -eq 1  # <-- make does not stop here 
    /bin/echo "Continues ..." 
    /bin/false         # <-- make stops here 
1

根據工具的行爲方式失敗,您可以檢查輸出文件的存在。是這樣的:

@if test ! -f $(FILE); then exit 2; fi 
8

使用

command || [ $$? -eq v ] 

爲你的命令,替換命令與命令,並v與成功返回值。

(這僅僅是迪迪埃Trosset的回答更緊湊的版本)。

+3

這不會像makefile那樣工作,因爲'$?'將根據make變量定義進行解釋。您需要使用'$$?'代替。 – 2011-04-28 17:14:13

+0

固定;感謝您的更正。 – reinierpost 2011-04-29 08:47:23

+1

與Didier Trosset的答案相比,當命令返回狀態爲0(在我的情況下,這不是我想要的)時,它也會通過! – 2011-06-24 09:58:57

相關問題