2016-08-29 30 views
6

Cプリプロセッサでそれを行うのが一般的だが、Rustでcfgを使用してリリース/デバッグビルドをチェックする方法は?

#if defined(NDEBUG) 
    // release build 
#endif 

#if defined(DEBUG) 
    // debug build 
#endif 

貨物のラフ同等物は、以下のとおりです。リリースの

  • cargo build --release
  • cargo buildデバッグ用。

Rustの#[cfg(...)]属性または!cfg(...)マクロを使って、同様の処理を行うにはどうすればよいですか?

私はRustのプリプロセッサがCのように動作しないことを理解します。私は文書とthis page lists some attributesをチェックしました。 (このリストを仮定すると、包括的である)

debug_assertionsを確認することができたが、より一般的なデバッグのケースを確認するために使用された場合、それは誤解を招く可能性があります。

この質問が貨物と関連しているかどうかはわかりません。

+1

@Shepmasterこれは[この質問](http://stackoverflow.com/questions/30786738/how-to-redefine-a-macro/30787006?s=2%7C2.4527)に似ています。 – antoyo

答えて

9

#[cfg(debug_assertions)]を使用できます。 this discussionでこれを行う正しい方法として指定されました。今のところ適切な組み込み条件はありません。 referenceから

debug_assertions - 最適化せずにコンパイルする場合、デフォルトで有効になっています。これを使用して、 開発で追加のデバッグコードを有効にできますが、本番環境では使用できません。たとえば、標準ライブラリのdebug_assert!マクロの動作を のように制御します。 hereを示すように

代替は、やや複雑な方法は、#[cfg(feature = "debug")]を使用して、クレートのための「デバッグ」機能を有効にビルドスクリプトを作成することです。

関連する問題