Как проверить, не сработал ли gcc, не вернул ли предупреждение или не сработал ли Bash? - PullRequest
6 голосов
/ 21 июня 2009

Как мне проверить, удалось ли gcc скомпилировать программу, не удалось или успешно, но с предупреждением?

#!/bin/sh

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

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

Это только проверяет, успешно ли оно выполнено или (не удалось или скомпилировано с предупреждениями).

-n означает «не ноль».

Спасибо!

РЕДАКТИРОВАТЬ Если неясно, это не работает.

Ответы [ 3 ]

20 голосов
/ 21 июня 2009

Ваше состояние должно быть:

if [ $? -ne 0 ]

GCC вернет ноль при успехе или что-то еще при сбое. В этой строке написано «если последняя команда вернула что-то отличное от нуля».

16 голосов
/ 21 июня 2009
if gcc helloworld.c -o helloworld; then 
echo "Success!";
else 
echo "Failure"; 
fi

Вы хотите, чтобы bash проверял код возврата, а не вывод. Ваш код захватывает стандартный вывод, но игнорирует значение, возвращаемое GCC (т. Е. Значение, возвращаемое main ()).

11 голосов
/ 22 июня 2009

Чтобы определить разницу между полной компиляцией и компиляцией с ошибками, сначала скомпилируйте нормально и проверьте $? Если не ноль, компиляция не удалась. Затем скомпилируйте с параметром -Werror (предупреждения рассматриваются как ошибки). Тест $? - если 0, он компилируется без предупреждений. Если не ноль, он скомпилирован с предупреждениями.

Ex:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...