使用 Rust 功能作为构建标志

问题描述 投票:0回答:1

我正在尝试使用 Cargo.toml 文件的功能在构建时有条件地设置属性。我这样做是为了让用于集成测试的构建有一些细微的差异。

#[cfg(feature = "inttest")]
const INFO_BYTES_SIZE: u32 = 28500;

#[cfg(not(feature = "inttest"))]
const INFO_BYTES_SIZE: u32 = 2000;

很简单吧?如果启用 inttest 功能,则 MAX_SWAP_INFO_BYTES_SIZE 变为 28500。

所有包 .toml 文件都具有相同的功能并像这样列出依赖项


[features]
default = []  # Empty default features
inttest = []

[dependencies]
common_code = { path = "../common", features = []}

当我构建时

cargo build --target wasm32-unknown-unknown --target-dir $1/target --release --locked --features inttest -p $1

该功能未打开,我仍然看到 INFO_BYTES_SIZE 为 2000。

有什么想法吗?

如果我像这样设置功能

common_code = { path = "../common", features = ["inttest"]}

然后它确实可以工作,但现在生产的值错误并且始终设置为 28500

rust rust-cargo
1个回答
1
投票

功能是按箱定义的。这里,

package
common_code
都有一个名为
inttest
的特征,但它们不是同一个特征;它们只是碰巧被命名相同。启用
package/inttest
不会自动启用
common_code/inttest

如果您希望启用

package/inttest
也启用
common_code/inttest
,您需要显式声明功能依赖关系:

[features]
default = []
inttest = ["common_code/inttest"]

[dependencies]
common_code = { path = "../common" }

参见货物手册

© www.soinside.com 2019 - 2024. All rights reserved.