1. 概要
どうやらこれ、関数らしいのだ。
$(関数 引数)
の形式で処理後のシンボルを返すものである・・・と。
この項「GNU make 日本語訳(Coop編) - テキスト変形関数」を参考にさせていただきました。
2. 置換 $(subst)
$(subst from, to, text)
文字列 text 内の from 文字列を to 文字列に置換します。
3. ワイルドカード $(wildcard)
$(wildcard) を使用してワイルドカードを使うことができます。
変数 = $(wildcard ワイルドカードを使用したファイル名)
すなわち、下記のような環境で
> ls cpp/*.c
cpp/curses.c cpp/IsBigOrLittle.c cpp/t01.c cpp/test01.c cpp/test02.c cpp/test03.c cpp/wol.c
下記の Makefile を書いて
.PHONY : dummy
SOURCE = $(wildcard cpp/*.c)
dummy :
@echo $(SOURCE)
make すると以下のようなことになります。
> make
cpp/t01.c cpp/curses.c cpp/wol.c cpp/test02.c cpp/IsBigOrLittle.c cpp/test03.c cpp/test01.c
4. ディレクトリ以外を取り出し $(notdir)
$(dir name...) ← ディレクトリの取り出し
$(notdir name...) ← ディレクトリ以外を取り出し
$(suffix name...) ← サフィックスを取り出し
だそうな。
「ディレクトリ以外を取り出し」しか使用しそうにないが・・・。
前項と同様の状況で、下記の Makefile を書いて make します。
.PHONY : dummy
SOURCE = $(wildcard cpp/*.c)
dummy :
@echo $(SOURCE)
@echo $(dir $(SOURCE))
@echo $(notdir $(SOURCE))
@echo $(suffix $(SOURCE))
> make
cpp/t01.c cpp/curses.c cpp/wol.c cpp/test02.c cpp/IsBigOrLittle.c cpp/test03.c cpp/test01.c
cpp/ cpp/ cpp/ cpp/ cpp/ cpp/ cpp/
t01.c curses.c wol.c test02.c IsBigOrLittle.c test03.c test01.c
.c .c .c .c .c .c .c
5. 例外を設定 $(filter-out)
本当は $(filter) を先に述べるべきなんでしょうが、$(filter) はまだ使ったことがないのだ。
$(filter-out) を使用することでリストの中の例外を除外することができます。
変数 = $(filter-out 除外するファイル名, リストしたファイル名)
すなわち前項までと同様の環境で下記の Makefile を書いて make すると
.PHONY : dummy
SOURCE = $(notdir $(wildcard cpp/*.c))
dummy :
@echo $(SOURCE)
@echo $(filter-out t01.c wol.c, $(SOURCE))
> make
t01.c curses.c wol.c test02.c IsBigOrLittle.c test03.c test01.c
curses.c test02.c IsBigOrLittle.c test03.c test01.c
おわかりかと思いますが、除外するファイル名は、空白で区切って複数指定することができます。