/ / Makefileに新しいファイルの存在を知らせるにはどうすればいいですか? - makefile

どうやってMakefileに新しいファイルの存在を知らせることができますか? - makefile

Makefileを使ってファイルを書きたい static/config.js 次のようにします。

  • if js/config_local.js 存在する場合は、コピーして static/config.js
  • そうでなければ、コピー js/config.js (常に存在します) static/config.js

これまでのところ、私はこのように見えるものがあります:

# If there"s a config_local.js file, use that, otherwise use config.js
ifneq ($(wildcard js/config_local.js),)
config_file = js/config_local.js
else
config_file = js/config.js
endif

static/config.js: js/config.js js/config_local.js
cp $(config_file) static/config.js

js/config_local.js:

clean:
rm -f static/*

ない場合を除いて、これはほとんどの場合うまくいきます。 js/config_local.js ファイルと私は実行します makeそれから私は js/config_local.js ファイルと実行 make 繰り返しますが、何もする必要はないと思います。これは空のためだと思います js/config_local.js Makefileでターゲットにすることはできますが、それを削除すると、ビルドできなくなります。 js/config_local.js ファイルが存在しません。

私はまた空を削除しようとしました js/config_local.js ターゲットの設定と依存関係の設定 static/config.js ターゲットにする js/*.jsしかし、それは私が作成した後に何かをする必要があることに気付かないという同じ問題を抱えています js/config_local.js ファイル。

回答:

回答№1は2

内容ではなくチェックファイルの時間を確認します。 .PHONYは常に操作を強制します。欠点はそれが常にコピーすることです。ファイルの時間を節約するには、-pスイッチを使用します。

.PHONY: static/config.js
static/config.js : $(firstword $(wildcard js/config_local.js js/config.js))
cp -p $< $@