2

gcc (GCC) 4.7.2 cmake バージョン 2.8.10.2 c89

ビルドシステムとして cmake を使用しています。そして、それに応じてデバッグまたはリリースのいずれかにフラグを設定したいと思います。

デバッグでコンパイル

  SET(CMAKE_C_FLAGS_DEBUG "-Wall -Wextra -Wunreachable-code -g -m32 -D_DEBUG -O0 -D_LARGEFILE64_SOURCE -D_REETRANT -D_THREAD_SAFE")

リリースでコンパイル

  SET(CMAKE_C_FLAGS_RELEASE "-Wall -Wextra -Wunreachable-code -m32 -DNDEBUG -O2 -D_LARGEFILE64_SOURCE -D_REETRANT -D_THREAD_SAFE")

デバッグのために、フラグを含め、-g最適化をレベル 0 に設定しました。

リリースでは、フラグを削除し、 for 、、および-gを追加し、最適化をレベル 2 に設定しました。N-DNDEBUG-DNREETRANT-DNTHREAD_SAFE

私が言っていることは正しいNですNO DEBUGか?

デバッグ ビルドとリリース ビルドを区別するために必要なことはこれだけですか?

4

2 に答える 2

4

CMakeフラグに基づくいくつかの推奨事項は次のとおりです。

  1. デバッグモード-g -O0、およびリリースモード-O2 -g-gコードサイズが重要でない場合は、O2リリースモードでもフラグを追加することをお勧めします。を使用-gすると、コードのシンボル情報が含まれ、バイナリサイズ全体が約10%〜20%増加するだけですが、ユーザーはスタックダンプを提供できるため、デバッグに大いに役立ちます。
  2. -UDEBUG -UREETRANTの代わりに使用してください-DNDEBUG -DNREETRANT-DMACROフラグはコードに追加するのと同じです。の#define MACORようなコード領域がある#ifdef MACRO SOME_DEBUG_CODE #endif場合、プリプロセッサはコードをそこに保持しますが、-UDEBUGフラグはのよう#undefine MACROになり、プリプロセッサはを削除しSOME_DEBUG_CODEます。を追加するだけでは、コードに-DNDEBUG -DNREETRANT追加するようなものであり、意味がありません。#define NDEBUG #defin NREETRANT
于 2013-03-12T08:50:18.480 に答える