URLに依存するファイルの後にURLが更新された場合は、実行されるMakefileに依存関係が必要です。状況は少し複雑です。
- URL 1はダウンロードページを指します。このページが最後に変更された日付によってルールが変わりたいと思います。
- URL 1のページコンテンツには、ダウンロードする実際のファイルを指すURLが含まれています(URL 2と呼ばれます)。
私はPythonスクリプトを書いています(最後のレビュー)は「touch」を呼び出して、URLと変更日が同じファイルを生成します。これで、Makefile
次のようになります。
output_file: .input_url source_file
wc -l source_file > $@
source_file: .input_url
wget -q -O $@ --no-use-server-timestamps `cat .input_url`
.input_url: .input_modified
wget -q -O - $(DOWNLOAD_URL) | \
sed -n '1,/current version/d;\
/Previous versions/,$$d;
s/.*href="\\([^"]*\\):,*/\\1/p' > $@
lastmod -t $@ $(DOWNLOAD_URL)
.input_modified: FORCE
lastmod -t $@ $(DOWNLOAD_URL)
FORCE:
DOWNLOAD_URLはダウンロードページに設定されます。要点は、ダウンロードページが作成されてから変更された場合にのみ.input_urlを作成したいということです。これを行うには、常に.input_modifiedを再生成する必要がありますが、(新しく作成された).input_modifiedの変更時間が後である場合にのみ.input_urlを生成する必要があります。 「このルールを実行する」という概念と、「このルールに依存するアイテムを実行するように指示すること」とを区別する方法がわかりません。 「FORCE」を省略すると、.input_modified のルールは実行されません。私が置くと常に実行されますが、.input_urlのルールも同じです。私が望むことを達成する方法はありますか?
ベストアンサー1
以下を定義したい場合があります。前提条件のみ注文超過.input_modified実行するターゲット修正された場合テスト、
output_file: .input_url source_file
wc -l source_file > $@
source_file: .input_url
wget -q -O $@ --no-use-server-timestamps `cat .input_url`
.input_url: .input_modified
wget -q -O - $(DOWNLOAD_URL) | \
sed -n '1,/current version/d;\
/Previous versions/,$$d;
s/.*href="\\([^"]*\\):,*/\\1/p' > $@
lastmod -t $@ $(DOWNLOAD_URL)
.input_modified: | if_modified_test # as order-only-prerequisite
.PHONY: if_modified_test # test it
if_modified_test:
lastmod -t .input_modified $(DOWNLOAD_URL)