と仮定I以下のファイル階層があります。GNUは、各サブディレクトリを作る
Makefile
dir1/
script.sh
other_files.txt
dir2/
script.sh
other_stuff.dat
dir3/
script.sh
other_data.csv
... script.sh
(例えばecho "Hello world!"
私の本当の例では、各dir
を任意のメイクができ、出力を生成せずに実行するスクリプトです。 Rパッケージです)。
ディレクトリ内の何かが変更された場合にのみ、それぞれにscript.sh
を実行するMakefileを作成しようとしています。 script.sh
の各呼び出しはちょうど新しいrun.dirX
ファイル(例えばdir/script1.sh; touch run.dir1
)をタッチして続いている
DIRS := dir1 dir2 dir3
RUNFILES := $(DIRS:%=run.%)
.PHONY: all ${DIRS}
all: ${DIRS}
dir2: dir3
% : run.%
run.% : $(wildcard %/*)
$(@D)/script.sh
touch [email protected]
...:私はこれまで試したことはこれです。しかし、これは動作しません - make all
を実行するだけでは、ターゲットがないと言う。
スクリプトをメイクファイル全体を生成させるという厄介な解決策がなければ、これを行うにはクリーンな方法が必要だと思われますが、それが何であるか分かりません。何かご意見は?
あなたはと何も変わっていない場合にだけ、スクリプトを実行するようにしてくださいしたいですか?通常、Makeは何かが変更された場合にのみ、物事を行います。あなたが求めるものは可能ですが、解決策は厄介かもしれません。 – Beta
私は、何かが変わったならば、典型的な方法で変化することを意味しました。それに応じて私の質問を改訂しました。 –