2009-06-21 7 views
5

gccがプログラムのコンパイルに成功したのか、失敗したのか、または成功したのか、警告を出しているのかどうかを確認するにはどうすればよいですか?gccが失敗したか、警告を返したか、または成功したかどうかを確認する方法? (bashで)

#!/bin/sh 

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

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

これは、正常に完了したかどうか(警告付きで失敗したか、コンパイル済みかどうか)をチェックするだけです。

-nは "not null"を意味します。

ありがとうございます!

EDIT明らかでない場合、これは機能しません。

+0

それはおそらく働くことができないもう一つの理由:正しい構文は、[ "$文字列" -n] ''です。 – ephemient

+3

警告が表示されても、gccは終了コード0を返します。 – dtmland

答えて

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

bashには出力ではなく、戻りコードをテストします。あなたのコードは標準出力をキャプチャしますが、GCCが返す値(main()が返す値)は無視します。

+2

あるいは、gccを別のシェルスクリプト行で実行し、$?をテストします。 –

19

あなたの条件は次のようになります。

if [ $? -ne 0 ] 

GCCが成功、失敗した場合に何か他のものに0を返します。その行には「最後のコマンドがゼロ以外のものを返した場合」と表示されます。

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 
+0

このブルートフォースには2つのコンパイルが含まれています。そのようにしたいのであれば、2回目の実行に '-fsyntax-only'を含める必要があります(完全なコードを解析する以上のことはありません)。 いずれにしても、 'gcc'の出力をチェックするオプション(一時ファイルにstdoutを格納し、' arning'のためにgrep [大文字でもwでも構いません])を使う方が良いでしょう。 –