2016-07-27 4 views
0

GNU make Makefilesを使って実装しようとしている私のソフトウェアビルド自動化のいくつかの段階で、私は、ソースファイルの要件を満たすだけでなく、さまざまなタイプの要件として、他のソフトウェアに依存する対象が開始され、運用系プロセスとして存在する。GNUメイクファイルのルールにはプロセスが必要な場合はありますか?

このようなプログラムは、バックグラウンドプロセスだけでなく、HTML5アプリケーションを実行するウェブブラウザーなどのフォアグラウンドプロセスでもあります。ビルドプロセスで役割を果たす可能性があります。

私はそれゆえ、多少のようにルールを記述したいと思います:私は.PHONYターゲットはやや非ファイルターゲットであるという考えをとっているので、するプロセスをrequireringを可能に見られるように

.PHONY: firefoxprocess 

Html5DataResultFile: HTML5DataSourceFile firefoxprocess 
    cp HTML5DataSourceFile folder/checked/by/html5app/ 
    waitforHtml5DataResultFile 

firefoxprocess: 
    /usr/bin/firefox file://url/to/html5app & 

始めた? それが正しいかどうかわかりません。 GNU makeのドキュメンテーションは非常に優れていて、かなり大きく、私はそれを完全に理解しているのか分かりません。私の知る限りでは、ドキュメンテーションは実際にルールで使用されているプロセスの使用については報告していませんでした。

答えて

0

私の気持ちは、pidファイルはややプロセスやファイル間のリンクであることをされているが、彼らはいくつかの問題(つまり、競合条件、独自性など)が付属して時々Makefileの依存関係ツリーは自然にない要素を含んでいますか、必ず時間依存のファイルです。

  1. ステップを表現するために、ファイルを作成、または
  2. ちょうどステップの一環として、「行に」仕事をする:2つの答えがあります。

第2のオプションは、通常、最も簡単です。たとえば、ターゲットファイルをまだ存在しないディレクトリに作成する場合、ディレクトリ名自体を依存関係にすることは望ましくありません。これは、ディレクトリが変更されたときにファイルが古くなるためです。代わりに、私はこうします:

d/foo: 
    @test -d d || mkdir -p d 
    ... 

あなたの場合、あなたは何か似ている可能性があります。あなたはfirefoxの実行中のインスタンスをテストし、それを起動できる方法が必要です。このような何かを行う可能性があります:

Html5DataResultFile: HTML5DataSourceFile 
    pgrep firefox || { /usr/bin/firefox && sleep 5; } 
    cp HTML5DataSourceFile folder/checked/by/html5app/ 
    waitforHtml5DataResultFile 

何にそれが返す瞬間を行う準備ができていない可能性がありますので、sleepコールだけで、FFは初期化することができます。

あなたのケースでオプション#1の問題は、それが頼りにならず、少し円形であることです。プロセスが終了すると、Firefoxは確実にpidfileを削除しません。 の場合は終了時にファイルを正常に削除し、再起動時にファイルを再作成します。新しい問題が発生します。ファイルのタイムスタンプは、実際には再起動されたプロセスが、それらを無効にした。

関連する問題