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

时间:2016-09-26 18:08:52

标签: rust rust-cargo

我的Cargo文件中存在依赖关系,平台需要不同,特别是默认功能。这就是我想要做的事情:

[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"一样。如果我按照指定执行cargo build,则会出现与openssl相关的错误:

  

cargo:warning = #include< openssl / ssl.h>

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

[dependencies]
hyper = { version = "0.9", default-features = false, features = ["security-framework"] }

然后它建立良好。这向我表明“macos”的cfg无效。

如何使这项工作,或更具体地说,如何解决我需要依赖平台使用不同功能的问题?

1 个答案:

答案 0 :(得分:0)

使用Rust 1.13.0和Cargo 0.13.0-night可能看起来不可能。请参阅货物问题31951197

作为解决方法,您可以tell Cargo to use Homebrew's OpenSSL

export OPENSSL_INCLUDE_DIR=`brew --prefix openssl`/include
export OPENSSL_LIB_DIR=`brew --prefix openssl`/lib
export DEP_OPENSSL_INCLUDE=`brew --prefix openssl`/include