19

プラットフォーム固有の依存関係を持つクロスプラットフォーム ライブラリを作成しています。1 つは UNIX のようなプラットフォーム用、もう 1 つは Windows 用です。これらのクレートは特定のプラットフォームでのみコンパイルされるため、通常、依存関係の下にすべてを追加することはできません。

実際の錆のコードでは、特定のプラットフォーム用に特定のコードをコンパイルするcfgなどの属性を使用します#[cfg(unix)]。依存関係については、Cargo.toml またはビルド スクリプトで同様のことを行いたいと考えています。現在、次のようなターゲット トリプレットを使用しています。

[target.i686-unknown-linux-gnu.dependencies.crate1]
git = repo1
[target.x86-unknown-linux-gnu.dependencies.crate1]
git = repo1
[target.x86_64-unknown-linux-gnu.dependencies.crate1]
git = repo1

[target.i686-pc-windows-gnu.dependencies]
crate2 = "*"
[target.x86-pc-windows-gnu.dependencies]
crate2 = "*"
[target.x86_64-pc-windows-gnu.dependencies]
crate2 = "*"

ただし、このリストはすべてを網羅しているわけではありません。私はアーキテクチャや ABI には関心がなく、OS ファミリだけに関心があります。そのため、UNIX のようなターゲット トリプルごとに一致する場合、リストは非常に長くなります。

カーゴが実行されているプラ​​ットフォームの OS ファミリによってのみ決定される、特定の依存関係を使用する方法はありますか? 何かのようなもの:

[target.family.unix.dependencies]
abc-sys = "*"
def = "*"

[target.family.windows.dependencies]
abc-win = "*"
4

3 に答える 3

23

ここでドキュメントを読む限り、これは機能するはずです:

[target.'cfg(unix)'.dependencies]
abc-sys = "*"
def = "*"

[target.'cfg(windows)'.dependencies]
abc-win = "*"
于 2016-06-11T07:50:02.193 に答える
-1

現在、これを行う方法はありません。いいでしょう、きっと。

于 2015-05-07T15:21:36.760 に答える