4

Shake を使用して複雑なビルド スクリプトを開発していますが、(今のところ) Visual Studio ソリューションを使用してすべてのバイナリをビルドしています。このため、1 回のスイープで数十のファイルを作成するルールを定義する必要があります。ビルドが完了するまで、ビルドの出力がどうなるかわかりません。

たとえば、次のようなルールを書きたいとします。

"test-bins-x86" ~> do
    vsBuild unitTestSln X86 Release -- produces dozens of outputs to .\x86\Release

"x86/Release/*.test-results" *> \out -> do
    let testExe = out -<.> exe
    need [testExe]
    Stdout results <- cmd testExe
    writeFile' out results

しかし、現状では、どのように構築するかを正式に定義するルールがないため、のルールは*.test-resultsどのように構築するかを知りません。testExeどうすればこれを回避できますか?

4

1 に答える 1

3

2 つの解決策とコメントがあります。最初のコメント: ビルドの出力が事前にわからない場合、それtestExeが存在することをどのように知ることができますか? そうでない場合はどうすればよいですか?常にビルドされると想定できる実行可能ファイルのサブセットはありますか? 存在する可能性のある他のファイルや環境に依存しますか?

need私の最初のアイデアは、「test-bins-x86」を偽物にし、その偽物の代わりに特定の実行可能ファイルになるすべてのアクションを持たせるneedことです。これは、シェイク ビルドの実行ごとに VS ビルド システムを複数回呼び出す必要がない限り、おそらく機能します。

他のアプローチは、おそらく次のようにFilePatterns とを使用するものです%>

"x86/Release/*" %> \ _ -> need ["test-bins-x86"]

これは、必要に応じて拡張できます。さらに、実行可能ファイルが実際にこのルールを介して生成されたかどうかを確認し、そうでない場合は別のことを行うことができます。

ビルド出力がどうなるかを事前に判断できる場合は、 を使用することをお勧めします&%>が、その情報が利用できない場合は、その演算子を使用できません。

于 2014-10-21T00:21:17.357 に答える