web-dev-qa-db-ja.com

gcc、make:警告時に失敗を無効にする方法は?

私は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に指示したり、警告に失敗しないようにする方法はありますか?

11
Dr. Watson

ここでのトリガーは-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つのステージすべてでこれを繰り返す必要はありません(私は願っています!)。

5
Simon Wright

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

45

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

11
Jack

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

3
ZelluX

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

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

3
ezpz

Gcc configureでは、--disable-werrorを追加できます。

ただし、最初に適切なパッチを探すことをお勧めします。

2
Bob Blogge

コードの問題のある部分に「pragmawarnings(off、 "...")」を入れてはどうでしょうか。

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

0
user275257