2021年11月5日金曜日

Rustでdev 時にだけ出す出力

デバッグ時にだけ出力を出すようにしたい。Cでなら
#ifdef TEST
#endif
..
gcc -DTEST xxx.c
とやっていたようなやつ。

Rustにはデフォルトで幾つかプロファイルがあり、普通にコンパイルするとdevで コンパイルされ、--releaseをつけるとreleaseでコンパイルされる。

さらにもともとdebug_assertionsというコンパイルフラグ?が用意されているので これを使うと良さそう。もともとは同名のアサートマクロのON/OFFに使うもの。

#[cfg(debug_assertions)] println!("xxxx"); 
と書いておくと、releaseでは実行され、devでは実行されない。 このcfgの中に書いた文字列は、スペルミスしていても何も警告が出ないので要注意。

ちなみにこのあたりはCargo.tomlで設定できる。下のようにすると、releaseモードでも 出力されるようになる。こちらはハイフンで、cfgの中身はアンダースコアなのが 大変にはまりそう。。こちらもエラーでないし。

[profile.release]
debug-assertions = true