new で拡張可能にすることを目的として Shakefile を作成していRules
ます。そのインターフェースは functionであり、クライアント プロジェクトはすべてを機能mainFor :: Rules () -> IO ()
させるために定義するだけでよいという考えです。の呼び出しが続くShake の束として定義されます。main = mainFor myCustomRules
mainFor customRules
Rules
customRules
mainFor
これは、渡されたカスタム ルールが新しいターゲット用である限り機能します。
ただし、私のストック (非カスタム) ルールの一部は、基本的に「この入力でこの大きな不透明な独自の外部スクリプトを実行し、最善を尽くす」という形式になっています。入力に応じて、外部スクリプトによって使用される追加のファイルが存在する可能性があります。たとえば、次の形式のルールがあるとします。
"_build/output.bin" %> out -> do
need ["_build/script.scr", "_build/src/generated.src"]
runExternalScript
特定のクライアント プロジェクトでは、生成されたソース コードに別のファイルへの参照が含まれている場合があります_build/src/extrainput.src
。したがって、 に渡されるカスタム ルールではmainFor
、このファイルに追加のルールが必要なだけでなく、既存のルールも変更して、need
この入力であることを示す必要があります。
main = mainFor $ do
"_build/src/extrainput.src" %> \out -> do
generateExtraSrc
"_buld/output.bin" %> \out -> do
need ["_build/src/extrainput.src"]
しかし、当然のことながら、引数でmainFor
渡されたストック ルールと 2 番目のカスタム ルールの両方が同じターゲットに対するものであるため、これは失敗します。ストック ルールを完全にオーバーライドするのではなく、拡張して追加の依存関係を追加するだけであることに注意してください。customRules