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

Tyl*_*ler 6 bash gcc

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

#!/bin/sh

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

if [ string -n ]; then
    echo "Failure"
else
    echo "Success!"
fi
Run Code Online (Sandbox Code Playgroud)

这只检查它是否成功或(失败或编译时带有警告).

-n表示"不为空".

谢谢!

编辑如果不清楚,这是行不通的.

Ric*_*dle 20

你的病情应该是:

if [ $? -ne 0 ]
Run Code Online (Sandbox Code Playgroud)

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

  • $?如果有人不知道,则表示上次运行命令的返回值 (2认同)

Nei*_*eil 16

if gcc helloworld.c -o helloworld; then 
echo "Success!";
else 
echo "Failure"; 
fi
Run Code Online (Sandbox Code Playgroud)

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

  • 或者,在单独的shell脚本行中运行gcc,然后测试$?. (2认同)

And*_*ico 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
Run Code Online (Sandbox Code Playgroud)