请查看最小化的项目进行重现: https :
有一个工作区,其中包含一个动态库和一个依赖它的项目。 图书馆有一个特点。 问题是相同的构建和测试场景不适用于最近的工具链:
工作场景:
1) cargo +1.26.2 build --features feature
2) cargo +1.26.2 test --all -- --nocapture
不起作用:
1) cargo +1.28.0 build --features feature
2) cargo +1.28.0 test --all -- --nocapture
我目前的观察(在 OSX 上测试):工作场景 - 在步骤 (1) 中,库libcargo_check.dylib
在target/debug/deps
目录中构建,然后复制到target/debug
。 在第 (2) 步,它被重建(因为缺少功能),也复制(覆盖旧的)到target/debug
,然后执行测试应用程序,链接到target/debug
中的共享库target/debug/deps
但没有复制到target/debug
和测试应用程序针对target/debug
旧版本的动态库执行。 如果我手动删除target/debug
过时的libcargo_check.dylib
那么cargo +1.28.0 test --all -- --nocapture
按预期工作,因为测试应用程序是针对target/debug/deps
中的动态库执行的。
最初的 Rust 项目是一个涉及 Java 的复杂项目的一部分,所以整个项目都是用 Maven 构建的,Maven 依次执行用于构建和测试的货物。 我的期望是cargo test
行为方式与之前版本的工具链中的行为方式相同。
我针对几个版本的工具链对其进行了测试,可以说它适用于 1.26.2 和 1.27.2,但不适用于 1.28.0 和 1.29.1。
提前致谢!
cc @ehuss ,我想我们最近在不和谐的情况下讨论过这个问题,对吧? 因为这是目前预期的行为,但我们确实可以修复! (可能至少应该用于 dylib 输出)
我认为是在 #6131 中我们讨论了令人振奋的改变。
这里有很多事情:
当我们改变令人振奋的时候,担心可能会有问题,但当时我们想不出任何具体的事情。 看起来我们找到了一个! 😄
我看到了三种可能的解决方案:
我没有偏好。 2 非常简单,但我不知道其中的含义。 3有点难,但可行。
感谢您调查此@ehuss! 选项 (2) 对我来说听起来是解决这个问题的好方法,我绝对认为我们不应该因为在那里切换优先级而产生太大的影响,如果有必要,我们可以随时独立追求 (3)
最有用的评论
感谢您调查此@ehuss! 选项 (2) 对我来说听起来是解决这个问题的好方法,我绝对认为我们不应该因为在那里切换优先级而产生太大的影响,如果有必要,我们可以随时独立追求 (3)