2016-08-29 16 views
6

Với tiền xử lý C nó phổ biến để làm,Cách kiểm tra bản phát hành/gỡ lỗi bằng cfg trong Rust?

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

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

tương đương thô của hàng hóa là:

  • cargo build --release cho phát hành.
  • cargo build để gỡ lỗi.

Làm cách nào để sử dụng macro #[cfg(...)] Rust hoặc !cfg(...) để làm điều tương tự?

Tôi hiểu rằng bộ xử lý trước của Rust không hoạt động như C. Tôi đã kiểm tra tài liệu và this page lists some attributes. (giả sử danh sách này là toàn diện)

debug_assertions có thể được kiểm tra, nhưng nó có thể gây hiểu lầm khi được sử dụng để kiểm tra trường hợp gỡ lỗi chung hơn.

Tôi không chắc liệu câu hỏi này có nên liên quan đến Hàng hóa hay không.

+1

@Shepmaster Điều này tương tự như [câu hỏi này] (http://stackoverflow.com/questions/30786738/how-to-redefine-a-macro/30787006?s=2%7C2.4527). – antoyo

Trả lời

9

Bạn có thể sử dụng #[cfg(debug_assertions)]. Nó được đặt tên như một cách chính xác để làm điều này trong this discussion. Hiện tại không có điều kiện tích hợp phù hợp hơn.

Từ reference:

debug_assertions - Bật theo mặc định khi soạn thảo mà không tối ưu hóa. Điều này có thể được sử dụng để cho phép thêm mã gỡ lỗi trong phát triển nhưng không được sản xuất. Ví dụ: nó kiểm soát hành vi của macro chuẩncủa thư viện chuẩn.

Cách thay thế hơi phức tạp là sử dụng #[cfg(feature = "debug")] và tạo tập lệnh xây dựng cho phép tính năng "gỡ lỗi" cho thùng của bạn, như được hiển thị here.

Các vấn đề liên quan