問題タブ [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.

0 投票する
1 に答える
213 参照

shake-build-system - Shake はターゲットを再構築するかどうかをどのように決定しますか?

出力を再構築する必要があるかどうかを判断するためにShakeが使用するルールについて、私は混乱しています。2 つのステップでドキュメントを作成する簡単なビルドがあります。完全なビルド ファイルを以下に示しますが、要約すると、asciidocを使用して.txtファイルを.dbxml(Docbook XML) ファイルに変換し、次に を使用して PDF に変換しdblatexます。

PDF に触れてシェイクを再実行しても、出力は両方の入力よりも新しいため、何も起こらないはずです。ただし、実際には、shake は dblatex ステップを実行します。

次に、.dbxmlファイルに触れると、shake は dblatex を実行しますが、asciidoc は実行しないと予想します。これは、dbxml がその入力 (つまり.txt) よりも新しいためです。ただし、shake は実際には asciidoc と dblatex の両方のステップを実行します。

依存関係を間違えましたか?

0 投票する
2 に答える
306 参照

haskell - Haskell ファイルへの変更を追跡するには「ghc --make」が必要であることを Shake にどのように通知すればよいですか?

シェイクと併用のおすすめの使い方が知りたいghc --make。私のプロジェクトでは、シェイク ルールを使用して C ソース コードを*.oファイル (私は と呼びますcobjects) にコンパイルし、これらのオブジェクトは を呼び出すことによって、私の haskell プログラムに一緒にリンクされghc --makeます。このコマンドの実行中ghcに、haskell ファイルを再構築する必要がある時期を自動的に判断します。

以下の例は、2 つのツールを統合するように正しく記述されていません。ファイルが変更された場合.hs、shake スクリプトを再実行しても は再起動されませんghc --make。シェイクが再構築を知らない理由は理解できますが、推奨される修正方法はわかりません。

0 投票する
1 に答える
60 参照

shake-build-system - デフォルトに相当するものは何ですか:Shakeで

小さなプロジェクトで Make の代わりに Shake を使用しようとしています。現在、主にシェル コマンドのエイリアシングに使用されています。デフォルトの偽のアクションを指定する方法はありますか? デフォルトに似たもの:メイクファイル内。たとえば、次のようになります。

ターゲットが指定されていない場合、アクションを実行することを宣言したいと思いbuildます。

0 投票する
1 に答える
74 参照

haskell - Shake ルールでソース ファイル名を復元する

次のように機能する静的Webサイトのビルドシステムを作成しています。

  • すべてのファイルに対してファイルsrc/123-some-title.txtを生成しますout/123.html

私の問題は、ルールを作成するときに、ターゲット ファイル名out/*.html( ) からソース ファイル名 ( ) を復元する直接的な方法がないことです。src/123-some-title.txtout/123.html

もちろん、src/ディレクトリをもう一度読み込んで で始まるファイルを検索することもできます123が、シェイクでこれを行うより良い方法はありますか?

0 投票する
1 に答える
509 参照

haskell - Shake を使用して sh コマンドを実行する方法

既存のメイクファイルを Shake に移行しようとしていますが、これまでのところ次のことを試しました (ディレクトリの内容を含むファイルを作成するだけです)。

実行すると、次のエラー メッセージが表示されます。

私は何を間違っていますか?shコマンドを実行し、その出力をリダイレクトするにはどうすればよいですか?

0 投票する
2 に答える
243 参照

haskell - Shake でタイマー ルールを定義する方法

Shake使用方法と新しいルールの作成方法を理解しようとしています。backup演習として、ルールと呼ばれるものを実装することにしました。

アイデアは、ファイルが存在しない場合、またはファイルが古すぎる場合 (24 時間以上) にファイルを生成することです。長いコマンドをメイクファイルに保存して、必要に応じて実行するのが好きです。例は mysql バックアップです。唯一の問題は、バックアップが既に存在し、make何もしない場合です。これを解決するには、次のいずれかを実行できます

  • 新しいバックアップをやり直す前に、以前のバックアップを削除します。
  • バックアップ対象にするphony
  • 架空のforce依存関係を追加します。手動または cron で変更できます。

私が望むのは、バックアップが24時間以上経過している場合はバックアップをやり直すことです(これtouch forceはcronで実行できます)。とにかく、それはで遊ぶための単なる例Shakeです。私が欲しいのは次のようなものです:

ドキュメントを読みましたが、これを行う方法やルールを定義する方法、および an とは何かがわかりませんAction。クラスをインスタンス化する必要があることは理解していますが、Rule何が何であるかわかりません。

明確化

バックアップを自動的に実行するのではなく、オンデマンドでのみ実行したいのですが、最大で 24 時間に 1 回です。

シナリオの例として、リモート マシンに実稼働データベースがあり、ローカル コピーがあり、時間のかかるレポートをローカルで実行しています。通常のワークフローは

  • 本番バックアップをダウンロード
  • それを使用してローカルデータベースを更新します
  • ローカル倉庫データベースに非正規化テーブルをいくつか作成する
  • レポートを生成します。

レポートは毎日実行するのではなく、必要なときだけ実行します。そのため、24 時間ごとにレポートを実行したくありません。タイミング ビットを除いてメイクファイルを使用するのは簡単です。それらは面倒ですが、シェイクがどのように機能するかを深く理解するための不自然な例です。

したがって、最初make reportにバックアップを実行すると、データベースがすべて実行され、レポートが生成されます。ここで、レポートを変更したいと思います (テスト中のため)。バックアップを再生成する必要はありません(ローカルデータベースを更新する必要もありません)(私たちは夕方であり、翌日まで本番環境で何も変更されていないことを知っています)

そして翌日、または翌月、レポートを再実行します。今回は、バックアップを再度実行する必要があり、その依存関係もすべて再実行する必要があります。

基本的に私が必要とするルールは代わりに

やり直しタイムスタンプ = タイムスタンプ < 古い

やり直しタイムスタンプ = タイムスタンプ < 古い || 現在 > タイムスタンプ + 24*36000

しかし、このルールをどこに置くべきかわかりません。

問題は、それをどのように書くかではなく、どこに置くかです(上にあります)。(説明するのが)簡単な場合は、ユーザー(getLine)に「このターゲットをやり直しますか(はい/いいえ)?」と尋ねるルールを作成できます。

後で、データベース (または特定のテーブル) の最終更新に応じたルールも必要になります。データベースから情報を取得する方法は知っていますが、Shake に統合する方法はわかりません。

私はaが何であるかと混乱するかもしれませんRule。ルールを作るということは、ターゲットをどのように作るか (つまり、よりレシピ的なものです)、または Shake のアクションであると私が考えるものです。どこにルールがあるかというと、どうやってリメイクするかではなく、リメイクするかしないかを決めるルールのことです。make では、選択の余地がないので (タイムスタンプです)、そのような概念はありません。

0 投票する
1 に答える
66 参照

shake-build-system - Shake でコンソールの進行状況メッセージを表示する

wgetファイルをダウンロードするために呼び出して、シェイクを使用しています。コマンド ラインでこれを行うと、1 行のプログレス バーが表示されますが、Shake から呼び出すと、多数のドットの行が表示されます。例として:

1行の進行状況バーを表示したいと思います。