Pet*_*aro 18 macros conditional-compilation rust rust-cargo
假设我在 中定义了以下功能Cargo.toml:
[features]
my_feature = []
Run Code Online (Sandbox Code Playgroud)
以下代码位于src/lib.rs:
[features]
my_feature = []
Run Code Online (Sandbox Code Playgroud)
我如何强制功能字符串与显式定义和隐式可用功能的列表相匹配,以便Cargo.toml避免例如拼写错误?
Kev*_*eid 14
当实现RFC 3013 “在编译时检查条件编译”时,将出现#[cfg]引用 Cargo 未声明的功能名称的警告,正如您所要求的那样。然而,实施才刚刚开始(2021 年 9 月 28 日)。
RFC中描述的操作方式正如您所建议的那样,\xe2\x80\x98cargo会将标志传递给rustc\xe2\x80\x99。
值得注意的是,这不会检查源文本中出现的所有条件;如RFC 中所述:
\n\n\n此 lint 将无法检测未编译模块内的无效 #[cfg] 测试,可能是因为祖先 mod 被禁用。
\n
因此,它不会确认所有内容#[cfg(feature)]在单个cargo check\xe2\x80\x94 上都有效,您需要使用各种功能或功能组合进行测试。但无论如何,您都需要这些相同的组合来检查所有可以启用的常规源代码中的编译错误;一旦你这样做了,lint 将向你保证你没有任何由于拼写错误而从未启用的#[cfg(feature)]东西。