Rust 为什么最后一个特定于平台的依赖项优先于Cargo?

Rust 为什么最后一个特定于平台的依赖项优先于Cargo?,rust,rust-cargo,Rust,Rust Cargo,我的货物文件中有一个依赖项,它需要根据平台(特别是默认功能)而有所不同。以下是我正在尝试做的: [package] name = "..blah.." version = "..blah.." authors = ["..blah.."] [target.'cfg(target_os = "macos")'.dependencies] hyper = { version = "0.9", default-features = false, features = ["security-frame

我的货物文件中有一个依赖项,它需要根据平台(特别是默认功能)而有所不同。以下是我正在尝试做的:

[package]
name = "..blah.."
version = "..blah.."
authors = ["..blah.."]

[target.'cfg(target_os = "macos")'.dependencies]
hyper = { version = "0.9", default-features = false, features = ["security-framework"] }

[target.'cfg(target_os = "linux")'.dependencies]
hyper = { version = "0.9", default-features = true }
但这似乎不是我想要的。在我的Mac电脑上,它似乎在使用底部目标行,好像我刚刚指定了
hyper=“0.9”
。如果我按照规定进行
货物构建
,我会得到与openssl有关的错误:

货物:警告=#包括

但是,如果我这样构建它:

[dependencies]
hyper = { version = "0.9", default-features = false, features = ["security-framework"] }
然后它就可以很好地构建。这向我表明“macos”的
cfg
不起作用


我该如何做到这一点,或者更具体地说,我该如何解决我需要依赖性才能按平台使用不同功能的问题?

Rust 1.13.0和Cargo 0.13.0每晚都不可能做到这一点。见货物问题和运输

作为解决方法,您可以:

export OPENSSL\u INCLUDE\u DIR=`brew--前缀OPENSSL`/INCLUDE
导出OPENSSL\u LIB\u DIR=`brew--前缀OPENSSL`/LIB
export DEP\u OPENSSL\u INCLUDE=`brew--前缀OPENSSL`/INCLUDE

为什么这不是的副本?我想这不是副本,因为上面的语法似乎与和中的示例相匹配。@Shepmaster理论上他们试图解决相同的问题,所以我想我的问题是“为什么我的货物文件没有为依赖项选择正确的配置?”.@wimm我想我没有跟上。
[target.cfg(windows)”.dependencies]
,没有
target\u os
。@Shepmaster是一个使用
target\u os
的示例,尽管在
中不是
。配置应与
#[cfg(…)]
中使用的配置相同,其中
目标操作系统
在中列出。使用自制的OpenSSL也有文档记录,但我认为这对OP没有帮助。具体而言,我相信他们希望避免在macOS上使用OpenSSL,而是使用内置的SSL框架。是的,这就是为什么我说这在目前是不可能的,剩下的只是一个解决办法。对于我的用例,我更喜欢我的板条箱在没有手动修改的情况下编译
Cargo.toml
,而不是注释/取消注释其中的一行以链接到框架。。。Bu tI同意这不是最优的,不能解决问题。