2009-06-21 25 views
5

Làm cách nào để tôi kiểm tra xem gcc đã thành công trong việc biên dịch chương trình, không thành công hay thành công nhưng với cảnh báo?Cách kiểm tra xem gcc có bị lỗi hay không, trả lại cảnh báo hoặc thành công? (trong bash)

#!/bin/sh 

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

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

Điều này chỉ kiểm tra xem nó đã thành công hay (không thành công hoặc được biên soạn với cảnh báo).

-n có nghĩa là "không phải là rỗng".

Cảm ơn!

EDIT Nếu không rõ, thao tác này không hoạt động.

+0

Một lý do tại sao nó không thể nào làm việc: cú pháp chính xác là '[-n "$ string"]'. – ephemient

+3

Lưu ý rằng gcc sẽ trả về mã thoát của 0 ngay cả khi có cảnh báo. – dtmland

Trả lời

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

Bạn muốn bash để kiểm tra mã trả về chứ không phải đầu ra. Mã của bạn bắt giữ stdout, nhưng bỏ qua giá trị được trả về bởi GCC (nghĩa là giá trị được trả về bởi hàm main()).

+2

Cách khác, hãy chạy gcc trong dòng tệp shell riêng biệt, sau đó kiểm tra $ ?. –

19

tình trạng của bạn nên là:

if [ $? -ne 0 ] 

GCC sẽ trở lại không thành công, hay cái gì khác trên thất bại. Dòng đó nói "nếu lệnh cuối cùng trả về một cái gì đó khác không."

11

Để biết sự khác biệt giữa việc biên dịch hoàn toàn sạch sẽ và biên dịch có lỗi, trước tiên hãy biên dịch bình thường và thử nghiệm $ ?. Nếu khác không, biên dịch thất bại. Tiếp theo, biên dịch với tùy chọn -Werror (cảnh báo được coi là lỗi). Thử nghiệm $? - nếu 0, nó được biên dịch mà không có cảnh báo. Nếu khác không, nó được biên dịch với cảnh báo.

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 
+0

Việc ép buộc này bao gồm hai bộ sưu tập. Nếu bạn thực sự muốn đi theo cách đó, lần chạy thứ hai nên bao gồm '-fsyntax-only' (sẽ không có gì khác hơn là phân tích cú pháp mã hoàn chỉnh). Trong mọi trường hợp, tùy chọn kiểm tra bổ sung đầu ra 'gcc' (lưu trữ stdout của nó trong một tệp tạm thời và grep cho' arning' [w có thể bằng chữ hoa hay không]) có khả năng là giải pháp tốt hơn. –

Các vấn đề liên quan