2017-11-24 29 views
0

私は、アプリケーションがCで書かれているが、出力画像もバンドルされウェブアプリが含まれているネットワークカメラ用のイメージを構築していますカメラの組み込みWebサービスにデプロイされている場合。Makefileのルール - コピー展開アーティファクトの依存関係を表現する方法を

makeを使用して画像を作成します。ヤーンを使用してweb-appを作成します。私は画像をビルドするたびにyarn buildを実行しないように、makefileルールを作成したいと思います。

$(WEBAPP_PATH)/build: $(WEBAPP_PATH) 
    @echo Building web-app... 
    @pushd $(WEBAPP_PATH); yarn build; popd; 

$(PACKAGE_PATH)/html: $(WEBAPP_PATH)/build $(PACKAGE_PATH)/.dir 
    @echo Copy html... 
    mkdir -p [email protected] 
    cp -r $(WEBAPP_PATH)/build/index.html [email protected]/ 
    cp -r $(WEBAPP_PATH)/build/js [email protected]/ 

をしかし、どのように私は、バンドルを構築する必要性について、より詳細なチェックを書き込むことができます。現在、私は持っていますか?

更新:私の質問は、Web-appビルドアーチファクトが、その名前がランダムなので、更新されていることを実際に検出する方法です。糸を実行するルールにステップを追加します

1):以下は、あなたが望む効果をもたらす可能性があるよう

+0

ウェブアプリケーションの再構築をトリガするときに、カメラから新しいイメージが書き込まれるたびに、望ましい基準は何ですか?私は '$(WEBAPP_PATH)/ build'ターゲットがMakeの実行ごとに実行されていることをコンテキストから推測しています。それは 'PHONY'とマークされていますか? (私は 'bundle 'が' $(WEBAPP_PATH)/ build'ディレクトリの内容であるとも仮定しています) – lockcmpxchg8b

+0

makeを実行するたびにWebアプリケーションを再構築しないようにしたいと思います。一方、私はバンドルがいつ更新されたかを検出したいと思うし、入力がタッチされたときに糸を実行したい。 – user331244

+0

ええ、私はちょっとうんざりですが、WEBAPP_PATHは、yarn.lockファイルと私が見つけたWebアプリケーションプロジェクトの場所です。 PACKAGE_PATHはイメージの中間体がある場所です。バンドルはそれをすべてインクルードする前にそこにコピーされます。 – user331244

答えて

0

コメントに基づいて、それはそう、それtouchファイルを作ります。次に、そのルールのターゲットをタッチファイルにします。このルールの依存関係を更新して、ヤーンを再度実行する必要があるときに通知するすべての入力を一覧表示する必要があります。 (注意:index.htmlをのタイムスタンプが糸を実行すると、その後、あなたの代わりにtouchfileとタッチ段階のそれを使用することができますするたびにぶつけている場合。)

$(WEBAPP_PATH)/touchfile: $(WEBAPP_PATH) $(YARN_INPUTS) 
    @echo Building web-app... 
    @pushd $(WEBAPP_PATH); yarn build; popd; 
    touch $(WEBAPP_PATH)/touchfile 

2)その後に依存するように、あなたのバンドル・コピー・ルールを更新すべてのランダムな名前のファイルの代理としてタッチファイルのタイムスタンプ。また、このルールのターゲットを生成するindex.htmlのコピーに更新します。

$(PACKAGE_PATH)/html/index.html: $(WEBAPP_PATH)/touchfile $(PACKAGE_PATH)/.dir 
    @echo Copy html... 
    mkdir -p [email protected] 
    cp -r $(WEBAPP_PATH)/build/index.html [email protected]/ 
    cp -r $(WEBAPP_PATH)/build/js [email protected]/ 

3)次に、copyがそのタイムスタンプを更新するため、依存関係として$(WEBAPP_PATH)/build/index.htmlを指定し、それによってリンク・ルールをトリガすることができ、リンクステップを実行するルール。

+0

それは完璧な、素晴らしい答えを働いた。 – user331244

関連する問題