2009-06-21 34 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 
相关问题