2016-09-26 38 views
9

我的货运文件中有一个依赖关系,需要根据平台,特别是默认功能的不同而有所不同。这是我想要做的:为什么在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:

货物:警告=#包括<的OpenSSL/ssl.h >

但是,如果我建立这样的:

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

然后它建立好。这表明对于“macos”cfg不起作用。

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

+1

为什么这不是http://stackoverflow.com/q/29854912/155423的副本? – Shepmaster

+0

我想这不是重复的,因为上面的语法似乎与[单元测试](https://github.com/rust-lang/cargo/blob/master/tests/cfg.rs)和[提交](https://github.com/rust-lang/cargo/pull/2328/commits/f5d786e05600720ba4671caf5b598624103c8f72)。 – wimh

+2

@Shepmaster理论上他们正试图解决同样的问题,所以我想我的问题是“为什么我的Cargo文件不能为依赖关系选择正确的配置”。 – vcsjones

回答

0

它看起来不像Rust 1.13.0和Cargo 0.13.0每晚可能。请参阅货运问题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 
+0

使用Homebrew的OpenSSL也记录在[这里](http://stackoverflow.com/q/34612395/155423),但我不认为这将有助于OP。具体来说,我相信他们希望*避免在macOS上使用OpenSSL *,而是使用内置的SSL框架。 – Shepmaster

+0

是的,这就是为什么我说现在不可能,剩下的就是解决方法。对于我的使用案例,我更喜欢我的箱子编译时不用手动修改'Cargo.toml',而不是评论/取消注释中的一行来链接框架......我同意这不是最佳的,并不能解决问题。 –

相关问题