14

私はAVRマイクロコントローラーとavr-adaで使用するためにgccを構築しようとしていますが、通常のコンパイラーがAVRに必要なバージョンについてあまりにもうるさいために障害にぶつかりました。次の警告が表示され、gccまたはmakeがエラーを報告します。

gcc -c -g -O2 -gnatpg -gnata -nostdinc -I- -I. -Iada 
  -I../../gcc/ada ../../gcc/ada/exp_ch5.adb -o ada/exp_ch5.o
exp_ch5.adb:177:16: warning: function "Has_Address_Clause" is not referenced
make[2]: *** [ada/exp_ch5.o] Error 1
make[1]: *** [all-gcc] Error 2
make: *** [all] Error 2

gccに指示したり、警告に失敗しないようにする方法はありますか?

4

7 に答える 7

48

make -kの代わりに試してくださいmake。それは停止するのではなく、「継続」します。

于 2010-03-10T03:13:36.857 に答える
13

ビルド システムに飛び込む代わりに-Wno-error、CFLAGS で設定を試してみてください。これは、環境を通じて (または、GNU ビルド システムを使用している場合は構成時に) 実行できるはずです。

于 2010-03-10T05:51:15.980 に答える
7

ここでのトリガーは -gnatpg (実際には -gnatg) です。これは「GNAT 実装モード (GNAT ユニットのコンパイルに使用)」です。-gnatp は「すべてのチェックを抑制する」ことを意味します。

-gnatg の完全な効果については確信が持てませんが、コンパイラ自体のビルド中に警告が -Werror のようにエラーとして扱われることは確かです。RTS のビルド中に致命的ではない警告が表示されたことを覚えていると思います。

-gnatg を使用せずに手動で exp_ch5.adb だけをコンパイルすることも 1 つの方法です。あなたがリストしたコマンドはgcc /で発行されたので、

$ cd gcc
$ gcc -c -g -O2 -gnatp -gnata -nostdinc -I- -I. -Iada -I../../gcc/ada \
  ../../gcc/ada/exp_ch5.adb -o ada/exp_ch5.o

次に、1 レベル戻して、もう一度「make」します。

これはクロス コンパイラであるため、フル ビルドの 3 つの段階すべてでこれを繰り返す必要はありません (願わくば!)。

于 2010-03-10T21:10:34.190 に答える
4

Makefileに-Werrorフラグが設定されているようです。たぶん、MakefileでCFLAGSオプションを探して、-Werrorフラグを削除することができます。Werrorフラグは、すべての警告をエラーにします。

于 2010-03-10T03:20:10.340 に答える
3

一般に、コンパイラからの警告を無視することはお勧めできません。ただし、これがより大きなmakeプロセスの一部である場合は-Werror、シーケンスの前半にフラグが挿入されている可能性があります。それを探すことから始めます。

周りを見回した後、Adaコードのコンパイル中に警告を制御するためのフラグが豊富にあるようです。たとえば、このガイドに従って、参照されていないフォーマルに対する警告-gnatwFを抑制します。おそらく、必要なスイッチは、そこに提供されているリストにあります。

于 2010-03-10T03:22:19.690 に答える
0

「pragma warnings(off, "...")」をコードの問題のある部分に入れてみませんか?

http://www.adacore.com/2007/11/19/ada-gem-18/を参照してください。

于 2010-03-11T14:40:43.183 に答える