2016-08-29 8 views
6

С препроцессора C это общепринятая делать,Как проверить выпуск/отладочную сборку с использованием cfg в Rust?

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

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

шероховатых эквивалентами Cargo являются:

  • cargo build --release для выпуска.
  • cargo build для отладки.

Как можно использовать атрибут Rust's #[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!.

Альтернативой, немного сложный способ заключается в использовании #[cfg(feature = "debug")] и создать сценарий сборки, который позволяет «отладки» функцию для вашего ящика, как показано на рисунке here.

 Смежные вопросы

  • Нет связанных вопросов^_^