我正在尝试使用 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
功能是按箱定义的。这里,
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" }
参见货物手册。