2016-09-26 45 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',而不是評論/取消註釋中的一行來鏈接框架......我同意這不是最佳的,並不能解決問題。 –

相關問題