Help us understand the problem. What is going on with this article?

Makefileで多数のファイルを処理する

目的

Makefileでプログラムをコンパイルする方法はよく解説されているが,データ処理にも使いたい場合の資料は少ないので例示したい.良い処理や書きかたをさらに思いついたら加筆の予定.

単数のデータ=>単数のデータ

exe.xに00000を渡すとdirA/dataA00000.datを読み込んで,
dirB/dataB00000.pngが出力されるような場合,以下のように書けば良い.

dirB/dataB%.png: dirA/dataA%.dat exe.x
    exe.x $* 

つまりソースとターゲットの共通部分の文字列を%としておいて,コマンドでその共通部分を参照したいときには$*を使う.

複数のデータ=>複数のデータ

では,dataBを全部作りたい時にはどうするのか?

DATAA=$(shell ls dirA/dataA*.dat)
DATAB=$(patsubst dirA/dataA%.dat,dirB/dataB%.png,$(DATAA))

all: ${DATAB}

dirB/dataB%.png: dirA/dataA%.dat exe.x
    exe.x $* 

これはまずlsと*をつかってdataAを全部まとめたものをDATAAという変数にいれる.
そのDATAAからできるファイルはpatsubstをつかって変換して全部まとめたものをDATABという変数にいれる.あとは適当にDATABをソースやターゲットとして設定すればよい.

複数のデータ=>単数のデータ

ffmpegとかで複数のpngファイルからmp4のファイルを作りたいような場合.

DATAA=$(shell ls dirA/dataA*.dat)
DATAB=$(patsubst dirA/dataA%.dat,dirB/dataB%.png,$(DATAA))

dirC/dataC%.mp4: ${DATAB} makemovie.sh
     makemovie.sh 

参考記事

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした