2016-09-26 2 views
9

Ich habe eine Abhängigkeit in meiner Cargo-Datei, die von Plattform, speziell die Standardfunktionen unterschiedlich sein muss. Hier ist, was ich versuche zu tun:Warum hat die letzte plattformspezifische Abhängigkeit in Cargo Vorrang?

Aber das scheint nicht zu tun, was ich will. Auf meinem Mac scheint es die untere Ziellinie zu verwenden, als ob ich gerade hyper = "0.9" angegeben hätte. Wenn ich cargo build wie angegeben, ich Fehler in Bezug auf OpenSSL erhalten:

Ladung: Warnung = # include <openssl/ssl.h>

Allerdings, wenn ich es so bauen:

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

Dann baut es gut. Dies zeigt mir, dass die cfg für "Macos" nicht funktioniert.

Wie mache ich das, oder genauer gesagt, wie löse ich das Problem, wo ich meine Abhängigkeit brauche, um verschiedene Funktionen pro Plattform zu nutzen?

+1

Warum sind das kein Duplikat http://stackoverflow.com/q/29854912/155423? – Shepmaster

+0

Ich denke, es ist kein Duplikat, weil die obige Syntax den Beispielen in [unit tests] (https://github.com/rust-lang/cargo/blob/master/tests/cfg.rs) und [ commit] (https://github.com/rust-lang/cargo/pull/2328/commits/f5d786e05600720ba4671caf5b598624103c8f72). – wimh

+2

@Shempmaster gut in der Theorie versuchen sie, das gleiche Problem zu lösen, also nehme ich an meine Frage ist dann "Warum ist nicht meine Cargo-Datei die richtige Konfiguration für eine Abhängigkeit auswählen". – vcsjones

Antwort

0

Es sieht nicht so aus, als ob es mit Rust 1.13.0 und Cargo 0.13.0-Nightly möglich ist. Siehe Cargo-Ausgaben 3195 und 1197.

Als Abhilfe können Sie 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

Die Verwendung von OpenSSL von Homebrew ist auch dokumentiert [hier auf SO] (http://stackoverflow.com/q/34612395/155423), aber ich denke nicht, dass das OP helfen wird. Insbesondere glaube ich, dass sie vermeiden möchten, OpenSSL * auf macOS zu verwenden und stattdessen das integrierte SSL-Framework zu verwenden. – Shepmaster

+0

Ja, deshalb habe ich gesagt, dass es im Moment nicht möglich ist und dass der Rest ein Workaround ist. Für meinen Anwendungsfall bevorzuge ich, dass meine Kiste ohne manuelle Änderungen an 'Cargo.toml' kompiliert wird, anstatt eine Zeile darin zu kommentieren/auszukommentieren, um sie mit dem Framework zu verknüpfen ...Ich stimme zu, dass es nicht optimal ist und das Problem nicht löst. –

Verwandte Themen