私は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に指示したり、警告に失敗しないようにする方法はありますか?
ここでのトリガーは-gnatpg(実際には-gnatg)です。これは「GNAT実装モード(GNATユニットのコンパイルに使用)」です。 -gnatpは、「すべてのチェックを抑制する」ことを意味します。
-gnatgの完全な効果についてはよくわかりませんが、コンパイラ自体の構築中に、警告が-Werrorのように-エラーとして扱われることは確かです。 RTSの構築中に致命的ではない警告が表示されたことを覚えていると思います。
1つの可能性は、-gnatgを使用せずにexp_ch5.adbだけを手動でコンパイルすることです。リストしたコマンドは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つのステージすべてでこれを繰り返す必要はありません(私は願っています!)。
make
だけでなくmake -k
を試してください。それは停止するのではなく、「継続」します。
ビルドシステムに飛び込む代わりに、CFLAGSで-Wno-error
を設定してみてください。これは、環境全体で(または、GNUビルドを使用している場合は構成時に)実行できるはずです。システム)。
Makefileに-Werrorフラグが設定されているようです。たぶん、MakefileでCFLAGSオプションを探して、-Werrorフラグを削除することができます。 Werrorフラグは、すべての警告をエラーにします。
一般に、コンパイラからの警告を無視することはお勧めできません。ただし、これがより大きなmakeプロセスの一部である場合は、-Werror
シーケンスの前半に挿入されたフラグ。それを探すことから始めます。
周りを見回した後、Adaコードのコンパイル中に警告を制御するためのフラグが豊富にあるようです。例えば、 -gnatwF
willこのガイド に従って、参照されていないフォーマルの警告を抑制します。おそらく、必要なスイッチは、そこに提供されているリストにあります。
Gcc configureでは、--disable-werror
を追加できます。
ただし、最初に適切なパッチを探すことをお勧めします。
コードの問題のある部分に「pragmawarnings(off、 "...")」を入れてはどうでしょうか。