問題タブ [shake-build-system]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - Shake: 何かを再構築する必要があるかどうかを知らせる
私はシェイクを使用して一連の静的 Web ページを作成し、それを sftp を使用してリモート ホストにアップロードする必要があります。現在、cronjob が実行されます
シェイクが実際に何も再構築しなかった場合、最後のコマンドを実行することは避けたいと思います。シェイクに「何かを変更した場合にのみコマンドを実行してください」と伝える方法はありfoo
ますか?
または、プロセスの終了コードで何かを行ったかどうかを報告してください。
生成される可能性のあるすべてのファイルに依存するルールを追加できると思いますが、それは冗長でエラーが発生しやすいようです。
shake-build-system - ビルド中に Shake によって出力される情報を変更する方法
現在、Shake をビルドすると、次のような行が出力されます。
しかし、それは私たちのアプリケーションにとって有益ではないので、次のように出力したいと思います:
Shakeでそれをどのように行うことができますか?
haskell - シェイクを実行するとターゲットが再構築されるかどうかを確認する方法 (実際に構築しようとせずに)。
特定の状況では、特定のターゲット ファイルが最新かどうか、つまり、shake を使用してビルドするとターゲットに推移的に寄与するルールが実行されるかどうかをすぐに知りたいことがあります。
シェイクでこれを達成する最良の方法は何ですか?
私の質問は、 Shake: Signal if anything had to be rebuilt at all に多少関連しています。ただし、ビルド製品には一切触れたくないので、実際のビルドは実行したくありません。
haskell - Shake が Action の MonadMask インスタンスを提供しないのはなぜですか?
Shakeでtemporary
パッケージを使用したいのですが、欠落している のインスタンスが必要です。Shake がそのようなインスタンスを提供しないのはなぜですか?Action
MonadMask
haskell - Shakeで進行状況を表示するには?
コマンドを実行する前に、Progress タイプ (Development.Shake.Progress 内) から進行状況情報を取得して出力する方法を見つけようとしています。可能な望ましい出力は次のようになります。
今のところ、合計 (最初はソース ファイルの合計に設定) と、各ビルド コマンドを実行する前に増加するカウントを保持する IORef を使用してこれをシミュレートしていますが、これはハックなソリューションのように思えます。
その上、このソリューションはクリーン ビルドでは正しく動作するように見えますが、表示される合計がすべてのソース ファイルの合計であるため、部分ビルドでは正しく動作しません。
Progress データ型にアクセスすると、countSkipped、countBuild、および countTodo メンバーを使用してこの割合を正しく計算できます (Progress.hs:53 を参照)。
どんな助けでも大歓迎です。
shake-build-system - シェイクでバリアントをビルドするには?
パラメータをシェイクで渡し、ルールで使用するにはどうすればよいでしょうか? 以下に相当するものをいくつか作成したいと思います。
make ARCH=x86_64
または
make DEBUG=YES
など...
今のところ、環境変数とgetEnv
関数を使用してこれらをシミュレートしています。
特定のパラメーター (環境変数) に依存関係を作成して、ビルドで一度読み取ってどこかに保存し、複数のルールからアクセスできるようにするにはどうすればよいですか?
たとえば、今のところ、複数のルールで getEnv を複数回実行していますが、コンパイル時に環境変数が変更される可能性があります。また、たとえば、デバッグ フラグはコンパイラ フラグとリンカー フラグの両方を変更できます。つまり、リンクとコンパイルの両方の出力規則で情報を使用できるようにする必要があります。
haskell - Shake 関数の `want` と `need` で `FilePattern`/wildcards を使用する
関数want
とneed
両方は、入力がFilePath
ではなく型である必要がありFilePattern
ます。出力と入力のファイル名は異なるパターンに従います。出力は_build/*checker.sh
で、入力は./*.py
. したがって、私はむしろwant
次の形式を実行したいと思います。
よりも
want
組み合わせてより複雑なものを構築しようとしましたが、ではなく返されるgetDirectoryFiles, action, need
ため機能しません。getDirectoryFiles
Action [FilePath]
FilePath
この問題の適切な解決策は何でしょうか?
shake-build-system - 並列ビルドで出力同期の問題を回避するには?
シェイクで並列ビルドを使用すると、次のような不正な形式の出力が得られます。
印刷との何らかの同期の問題だと思います。出力コマンドとして次を使用していることに注意してください。
shakeOutput = const $ BS.putStr . BS.pack
ステータス メッセージの印刷セクションのルールは次のようになります。
シェイクに組み込まれた出力で、そのような印刷の問題を回避する方法はありますか? そうでない場合、印刷コードがシェイクルール内にあることを知って、どの種類の haskell 同期化メソッドを使用するのが適切でしょうか?
shake-build-system - 外部要因に従ってルール名を作成する方法は?
今まで私は次のコードを持っていました:
つまり、解析中のコマンド ライン フラグに従って作成されたルールの名前です (それらには arch 変数が含まれていました)。
したがって、私が与えた場合、ディレクトリshake --arch=x64
にメインターゲットを構築し、それに応じbin/x64/Release
てフォルダーに中間ビルドファイルを構築していましたtmp/x64/Release
。
しかし、コマンド ライン フラグを使用する代わりに、ルール名を作成するために使用される共有アーチ変数を、コマンドの出力に従って入力する必要があります。たとえば、最上位レベルのアクションを定義できる場合は、次のようになります。
mainTgt
との名前を作成するときに、アーチの代わりに変数 foundArch を使用しますbuildDir
。関数で作成できる唯一の最上位ルールでさえ をaction
返すため、明らかにこれは実行できませんRule ()
。代わりに何ができますか?