2009-06-21 37 views
5

我該如何去檢查gcc是否成功地編譯了一個程序,失敗或成功但是有警告?如何檢查gcc是否失敗,返回警告或成功? (在bash中)

#!/bin/sh 

string=$(gcc helloworld.c -o helloworld) 

if [ string -n ]; then 
    echo "Failure" 
else 
    echo "Success!" 
fi 

這隻檢查它是否成功或(失敗或編譯有警告)。

-n表示「不爲空」。

謝謝!如果它不明確,這是行不通的。

+0

另一個原因,它不可能工作:正確的語法是`[-n 「$字符串」]`。 – ephemient 2009-06-21 20:26:23

+3

請注意,即使出現警告,gcc也會返回0退出碼。 – dtmland 2015-08-27 20:10:27

回答

15
if gcc helloworld.c -o helloworld; then 
echo "Success!"; 
else 
echo "Failure"; 
fi 

您希望bash測試返回代碼,而不是輸出。你的代碼捕獲標準輸出,但忽略GCC返回的值(即main()返回的值)。

+2

或者,在單獨的shell腳本行中運行gcc,然後測試$ ?. – 2009-06-21 19:03:26

19

你的條件應該是:

if [ $? -ne 0 ] 

GCC會成功,什麼失敗,否則返回零。該行說「如果最後一個命令返回非零的東西。」

11

爲了區分完全乾淨地編譯和編譯錯誤,首先編譯正常並測試$ ?.如果非零,編譯失敗。接下來,使用-Werror進行編譯(警告被視爲錯誤)選項。測試$? - 如果爲0,則編譯時沒有警告。如果非零,則編譯時會出現警告。

例:

gcc -Wall -o foo foo.c 
if [ $? -ne 0 ] 
then 
    echo "Compile failed!" 
    exit 1 
fi 

gcc -Wall -Werror -o foo foo.c 
if [ $? -ne 0 ] 
then 
    echo "Compile succeeded, but with warnings" 
    exit 2 
else 
    echo "Compile succeeded without warnings" 
fi 
相關問題