ファイル個別処理

個別ファイル処理

任意のディレクトリAに格納されているファイルをコマンドで処理し、その結果をファイルごとに、別ディレクトリBへ出力する。

INPUT    := input/
OUTPUT   := output/
INFILES  := $(wildcard $(INPUT)*)
OUTFILES := $(INFILES:$(INPUT)%=$(OUTPUT)%)

default: $(OUTFILES)

$(OUTPUT)%: $(INPUT)%
	cat $< > $@

clean:
	rm -f $(OUTPUT)*

詳細

  1. INPUT変数は、入力ファイルが存在するディレクトリのパスを表します。
  2. OUTPUT変数は、出力ファイルが生成されるディレクトリのパスを表します。
  3. INFILES変数は、INPUTディレクトリ内のすべてのファイルのリストを取得します。
  4. OUTFILES変数は、各入力ファイルのパスをINPUTからOUTPUTに変更したもののリストを作成します。
  5. defaultターゲットは、OUTFILES内の各ファイルを生成することを指定しています。これはMakefileがデフォルトで実行された場合の動作を定義しています。
  6. ルール $(OUTPUT)%: $(INPUT)% は、各出力ファイルを生成するためのルールを指定しています。具体的な処理は、cat $< > $@で、各入力ファイルを対応する出力ファイルに単純にコピーします。

つまり、このMakefileは、INPUTディレクトリ内のファイルをOUTPUTディレクトリにコピーする単純なタスクを自動化しています。

cat $< > $@を変更すると、Makefileの挙動が変わります。この行は、入力ファイルから内容を読み取り、それを出力ファイルに書き込むことを意味しています。変更することで、他の処理や変換を行うことができます。