2016-09-26 16 views
9

Tôi có một sự phụ thuộc trong tệp Cargo của mình cần phải khác nhau theo nền tảng, cụ thể là các tính năng mặc định. Đây là những gì tôi đang cố gắng làm:Tại sao phụ thuộc nền tảng cụ thể cuối cùng được ưu tiên trong Hàng hóa?

[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 } 

Nhưng điều này dường như không làm những gì tôi muốn. Trên máy Mac của tôi, dường như nó đang sử dụng dòng đích dưới cùng như thể tôi đã chỉ định hyper = "0.9". Nếu tôi cargo build theo quy định, tôi nhận lỗi liên quan đến openssl với:

hàng: cảnh báo = # include <openssl/ssl.h>

Tuy nhiên, nếu tôi xây dựng nó như thế này:

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

Sau đó, nó được xây dựng tốt. Điều này cho tôi biết rằng cfg cho "macos" không hoạt động.

Làm cách nào để thực hiện công việc này hoặc cụ thể hơn, làm cách nào để giải quyết vấn đề mà tôi cần sự phụ thuộc của tôi để sử dụng các tính năng khác nhau theo nền tảng?

+1

Tại sao điều này không phải là một bản sao của http://stackoverflow.com/q/29854912/155423? – Shepmaster

+0

Tôi đoán nó không phải là một bản sao vì cú pháp ở trên dường như phù hợp với các ví dụ trong [kiểm tra đơn vị] (https://github.com/rust-lang/cargo/blob/master/tests/cfg.rs) và [ cam kết] (https://github.com/rust-lang/cargo/pull/2328/commits/f5d786e05600720ba4671caf5b598624103c8f72). – wimh

+2

@Shepmaster cũng về lý thuyết họ đang cố gắng giải quyết cùng một vấn đề, vì vậy tôi cho rằng câu hỏi của tôi là "Tại sao tệp Hàng hóa của tôi không chọn cấu hình đúng cho sự phụ thuộc". – vcsjones

Trả lời

0

Có vẻ như không thể thực hiện được với Rust 1.13.0 và Cargo 0.13.0-night. Xem Vấn đề về hàng hóa 31951197.

Là một khắc phục, bạn có thể 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

Sử dụng OpenSSL của Homebrew cũng được ghi lại [ở đây trên SO] (http://stackoverflow.com/q/34612395/155423), nhưng tôi không nghĩ điều đó sẽ giúp OP. Cụ thể, tôi tin rằng họ muốn * tránh sử dụng OpenSSL * trên macOS và thay vào đó hãy sử dụng khung SSL được tích hợp sẵn. – Shepmaster

+0

Vâng, đó là lý do tại sao tôi nói rằng không thể cho thời điểm này và rằng phần còn lại là một cách giải quyết. Đối với trường hợp sử dụng của tôi, tôi thích thùng của tôi để biên dịch mà không cần sửa đổi thủ công đối với 'Cargo.toml' thay vì bình luận/bỏ ghi chú một dòng trong đó để liên kết với khung công tác ...Bu tI đồng ý nó không tối ưu và không giải quyết được vấn đề. –

Các vấn đề liên quan