2017-08-15 6 views
0

オプションの依存関係を持つDUBベースのプロジェクトを使用している場合、依存関係が存在する場合にのみコード(モジュールまたはバージョン(...){...}ブロック)がコンパイルされるようにする方法選ばれた?依存関係が存在するかどうかに基づいて定義されたバージョン識別子を作成する方法はありますか?DUBでは、オプションの依存関係に基づいてコードを条件付きでコンパイルするにはどうすればよいですか?

「依存性」タグの「オプション」属性と「デフォルト」属性については、文書hereで既に読んでいます。これにより、依存関係をオプションとして定義することができますが、選択した依存関係を反映するようにコードをバージョン化できないと歯が欠けます。

答えて

2

たぶん、あなたは、私がわからないことができますが、あなたがこのようなものを使用することができそうです:あなたのオプションの依存性は、あなたが

Have_sdlang_d 

同じを使用することができ-Dをsdlangことになるのであれば

version(Have_name_of_dependency) 

here

これはダブコードのthis一部に基づいている

+0

あなたはそれを釘付けにしたと思います。ありがとう! 私はdub.selections.jsonから削除し、あなたが提案したバージョン(Have_ *)コードを使用して、依存関係のないプロジェクトを構築できました。残念ながら、そのプロジェクトに依存する他のプロジェクトでは、最初のプロジェクトでデフォルト= falseで、すべてのdub.selections.jsonファイルにsdlang-dが存在しなくても、依存関係グラフにオプションの依存関係(例:sdlang-d)を含めるよう依頼しています関与する。しかし、それは別の問題のように思えるかもしれません。おそらく、バグや尋ねられる別の質問です。 – chadjoan

+0

あなたはoptional = trueを使用する必要があります – Kozzi11

+0

optional = trueも(すでに)設定されています。申し訳ありません。 – chadjoan

0

version(foo)ブロックを使用し、人々にversions: "foo"をdub.sdlに使用するように依頼する以外に、1つのオプションがあります。それは難しいですが、うまくいくでしょう。

あなたのコードは、テンプレートであれば、あなたは、関連するものをラップすることができます:それはないテンプレートの場合は、テンプレートに変換することができ

template HasVibe() 
{ 
    enum HasVibe = 
     is(typeof(() { import vibe.d; })); 
} 

template Foo(T) if (HasVibe!()) 
{ 
    // your code here 
} 

template log() if (HasVibe!()) 
{ 
    import vibe.core.log : logDebug; 
    alias log = logDebug; 
} 

未テストしかし、それはピンチで助けるかもしれません。

関連する問題