如何根据构建配置切换依赖项

13
我希望在发布配置下使用依赖项的某个功能,而在测试/开发时不使用任何功能。
例如,该依赖项通常定义为:
[depenencies.my_dep]
version = "*"

但是当我使用发布配置进行构建时,我希望它能够

[depenencies.my_dep]
version = "*"
features = [my_feature]

从货运文档中我可以看出,这只能在平台目标上实现。是否有一种方法可以针对基于配置文件的配置来实现它?

虽然这不是你问题的完美答案,但在debug_assert宏的源代码中有类似于cfg(debug_assertions)的东西,可以根据调试和发布模式进行条件编译。我曾经在这里阅读过帖子后使用过它:https://users.rust-lang.org/t/conditional-compilation-for-debug-release/1098 - ustulation
1
这听起来像是一个坏主意... 为什么你不想发布你测试的相同代码呢? - Shepmaster
我使用一个创建的工具箱来进行一些分散式网络操作。因此,在开发过程中,我使用该库的模拟网络功能进行开发和测试。然后连接到实际网络进行最终测试和发布。 - Krishna
1
虽然这不完全是你要找的,但为什么不只是执行 default-features = ["my_feature"],并在开发时使用 cargo 的标志 --no-default-features 呢? - kbknapp
1
一个很好的例子就是Amethyst(技术上是Rendy)的no-slow-safety-checks功能。让发布版本启用此功能会很不错,但不要让调试版本启用。 https://book.amethyst.rs/stable/appendices/c_feature_gates.html - Nathan Fox
1个回答

6

cargo 不直接支持您想要的内容。 我看到两个选项。

A. 使用 dev-dependencies,允许测试具有不同的依赖关系,而不是调试/发布。介绍了dev-dependencies

B. 有一个 Cargo-mock.toml 和一个 Cargo-release.toml。 使用 cargo build --manifest-path ./Cargo-<type>.toml 在它们之间切换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接