【问题标题】:What is a crate attribute and where do I add it?什么是 crate 属性,我在哪里添加它?
【发布时间】:2015-02-11 19:41:29
【问题描述】:

为了了解 Rust 的工作原理,我决定研究一个名为 Iota 的基于终端的小型文本编辑器。我克隆了存储库并运行了cargo build,却被告知:

error: *if let* syntax is experimental

help: add #![feature(if_let)] to the crate attributes to enable

我应该在哪里将 #![feature(if_let)] 添加到 crate 属性中?

【问题讨论】:

  • 附带说明,Rust 的较新(夜间)构建默认启用了此功能,因此更新 Rust 也将解决您的问题。

标签: rust rust-cargo


【解决方案1】:

crate 属性是适用于封闭上下文 (#![...]) 的属性 (#[...])。此属性必须添加到您的 crate 根 的顶部,因此上下文就是 crate 本身:

#![attribute_name]
#![attribute_name(arg1, ...)]

如果你正在创建

  • 一个库 — crate 根将是一个名为 lib.rs 的文件
  • 一个应用程序 — crate 根将是您构建的主要 .rs 文件。在许多情况下,这将被称为main.rs
  • 集成测试 - crate 根是tests/ 中的每个文件
  • 一个例子 - crate 根是examples/ 中的每个文件

The Rust Programming LanguageRust Reference 谈论一般属性。 The Unstable Book 包含功能标志列表和有关它们作用的简要文档。

有许多不同的 crate 属性,但 feature crate 属性 (#![feature(feature1, feature2)]) 只能在编译器的nightly 版本中使用。不稳定的特性不允许在稳定的 Rust 版本中使用。

【讨论】:

  • 为什么 #![...] 被称为内部属性?在基板项目中,文件#![cfg_attr(not(feature = "std"), no_std)]顶部有一行,这行是什么意思?它是否与 Cargo.toml 文件中的声明有某种关系,其中通常定义像 [features] default = ['std']
  • @gfan 因为它是它所应用事物的 inside 属性。另见docs.rust-embedded.org/book/intro/no-std.html
猜你喜欢
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 2011-03-25
  • 2019-12-23
  • 1970-01-01
相关资源
最近更新 更多