web-dev-qa-db-ja.com

-DNDEBUGは通常どこから来ますか?

ビルドシステムが何らかの形で変更され、最適化されたビルドで-DNDEBUGがコンパイル行に追加されなくなりました。 makefileを検索しましたが、見つかりません。

つまり、問題は、ほとんどの人にとって-DNDEBUGはどこで発生し、それはどのように変化したのでしょうか。 -DNDEBUGを使用する前は、これがどのメイクファイルからも削除されていないと思います。

ありがとう。

-ウィリアム

21
WilliamKF

コンパイラは、NDEBUG定義を追加するタイミングと追加しないタイミングを独自に決定できないため、フラグは常にmakefileまたはプロジェクトファイルのいずれかによって設定されます(ビルドシステムによって異なります)。

17
Tal Pressman

使用しているビルドシステムを指定しなかったため、これに答えるのは非常に困難です。 autoconfを使用している場合、ユーザーが-DNDEBUGをCPPFLAGSに手動で挿入するか(または、変更されたCONFIG_SITEファイルから設定していた可能性があります)、configure.acがNDEBUGを設定するためのカスタム変数を設定する可能性があります。 、またはconfigure.acはAC_HEADER_ASSERTを呼び出す場合があります。その場合、configureの呼び出しに--disable-assertを追加すると、config.hでNDEBUGが定義されます。それが起こり得る方法はたくさんあります。

8
William Pursell

私の経験では、-DNDEBUGは手動で渡されました。つまり、リリースモードでビルドするときにフラグが渡されるように、メイクファイルが書き込まれています。

4
Zach Hirsch