AFAIK,#[cfg(foo)]可以使用rustc --cfg foo或.cargo/config.toml中的rustflags = "--cfg foo"激活#[cfg(feature="foo")]通过cargo build -F foo启用两者似乎都实现了条件编译,但哪一种是正确的方法?
#[cfg(foo)]
rustc --cfg foo
.cargo/config.toml
rustflags = "--cfg foo"
#[cfg(feature="foo")]
cargo build -F foo
envsm3lx1#
您很可能希望使用特性。它们可以在每个板条箱的基础上打开和关闭。这也意味着依赖项可以使用特性禁用代码中他们不需要的部分,这就是许多特性的工作方式。以axum为例,它在cookies功能后面隐藏了类似Cookie的东西,因为不是每个使用axum的项目都希望或需要使用Cookie。另一方面,如果您想启用或禁用整个工作区(或项目)的代码,并且不打算在每个机箱的基础上禁用这些代码,则--cfg rustflag更有用。我最常看到的是那些拥有自定义构建系统的项目使用这些标志(例如AeroOS,它使用--cfg标志来启用或禁用5级分页)。另见@Masklinn评论
cookies
--cfg
1条答案
按热度按时间envsm3lx1#
您很可能希望使用特性。它们可以在每个板条箱的基础上打开和关闭。这也意味着依赖项可以使用特性禁用代码中他们不需要的部分,这就是许多特性的工作方式。
以axum为例,它在
cookies
功能后面隐藏了类似Cookie的东西,因为不是每个使用axum的项目都希望或需要使用Cookie。另一方面,如果您想启用或禁用整个工作区(或项目)的代码,并且不打算在每个机箱的基础上禁用这些代码,则
--cfg
rustflag更有用。我最常看到的是那些拥有自定义构建系统的项目使用这些标志(例如AeroOS,它使用--cfg
标志来启用或禁用5级分页)。另见@Masklinn评论