警告としてエラーとして扱われることなくコンパイルする方法は?


94

問題は、Windowsで正常にコンパイルされる同じコードがUbuntuでコンパイルできないことです。このエラーが発生するたびに:

cc1: warnings being treated as errors

さて、それは大きなコードベースであり、すべての警告を修正したくありません。

警告にもかかわらず、正常にコンパイルできる方法はありますか?


1
警告を修正することを強くお勧めします。すぐでない場合は、徐々に。あなたが取り払うたら-Werrorあなたは警告を削除した後、あなたは、ディレクトリ毎に戻ってそれを追加することができます。
ugoren

コンパイルが成功しても、期待どおりに動作しない可能性があります。私は何人かの人々に、Windowsでは問題なく動作するがLinuxではすぐにクラッシュするコードを書いてもらいました。
Dennis Meng

役立つコメントと回答をありがとうございました。要件によると、私が開始したすべての警告を修正する必要があるようです。しかし、今私が受け取っている警告はsqlite3.cからのものです:(X-c)<= Xが常にtrueであると仮定すると、符号付きオーバーフローは発生しないと仮定
Saurabh Verma

回答:


83

確かに、-Werrorが設定されている場所を見つけて、そのフラグを削除します。その後、警告は警告のみになります。


2
ダニエルに感謝しますが、私のプロジェクトには-Werrorフラグが設定されていません。他の場所で探すべきですか?
Saurabh Verma

13
どこかで設定する必要があります。デフォルトでは、私が知っているコンパイラでは警告はエラーとして扱われません。見つからない場合-Wno-errorは、ナイトクラッカーが提案するように、でオーバーライドしてみてください。これは、メイクファイルで-Werror設定したフラグの後にが渡されない限り機能しますCFLAGS
ダニエル・フィッシャー

31

を使用して、すべての警告をそのように扱うことができます-Wno-error。特定の警告がそのように扱われるようにする-Wno-error=<warning name><warning name>は、whereをエラーとして扱いたくない警告の名前にします。

すべての警告を完全に無効にする場合は、を使用します-w(非推奨)。


出典:http : //gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html



4

Linuxカーネルをコンパイルしている場合。たとえば、「unused-but-set-variable」である警告を無効にしたい場合、エラーとして扱われます。ステートメントを追加できます。

KBUILD_CFLAGS += $(call cc-option,-Wno-error=unused-but-set-variable,)

Makefile


3

すべての役立つ提案をありがとう。私は最終的に自分のコードに警告がないことを確認しましたが、再びsqlite3からこの警告を受けていました:

Assuming signed overflow does not occur when assuming that (X - c) <= X is always true

次のCFLAGを追加して修正しました。

-fno-strict-overflow

コード内の問題のある構成要素を指摘する警告が多数あります。それらを無効にすると、短い視点で先に進むことができますが、これらの問題が長期的にあなたを悩ませるために戻ってくるかどうかは決してわかりません。
Benjamin Bannier、2012

1
はい、そうです。私は自分のコードが警告なしであることを確認したことを意味していました(すべての警告を無効にしていません)
Saurabh Verma

3

-Wallそして-Werrorコンパイラオプションは、これらのコンパイラの設定に使用されている場合には、確認してください引き起こす可能性があります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.