如何检查gcc是否失败,返回警告或成功进行Bash?

时间:2009-06-21 18:56:26

标签: bash gcc

我如何检查gcc是否已成功编译程序,失败或成功但有警告?

#!/bin/sh

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

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

这仅检查它是否成功或(失败或编译并带有警告)。

-n表示“不为空”。

谢谢!

编辑如果不清楚,则无效。

3 个答案:

答案 0 :(得分:20)

你的病情应该是:

if [ $? -ne 0 ]

GCC将在成功时返回零,或者在失败时返回其他内容。该行说“如果最后一个命令返回的不是零。”

答案 1 :(得分:16)

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

您希望bash测试返回代码,而不是输出。您的代码捕获了stdout,但忽略了GCC返回的值(即main()返回的值)。

答案 2 :(得分: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