我如何检查gcc是否已成功编译程序,失败或成功但有警告?
#!/bin/sh
string=$(gcc helloworld.c -o helloworld)
if [ string -n ]; then
echo "Failure"
else
echo "Success!"
fi
这仅检查它是否成功或(失败或编译并带有警告)。
-n表示“不为空”。
谢谢!
编辑如果不清楚,则无效。
答案 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