December 09, 2020
ファイル名の関数
ファイル名に関する関数には dir や notdir、 realpath、 abspath、 wildcard などがあります。
他にも suffix や addsuffix などの便利な関数がありますが、あまり使わないので必要に応じて調べて使うとよいと思います。
dir
dir は names... からディレクトリ部分を取り出します。
$(dir names...)スラッシュ(/)を含まない場合は ./ を返します
dir:
echo $(dir src/main.c Makefile)$ make dir
echo src/ ./
src/ ./notdir
notdir は names... からディレクトリ部分を取り除いて返します。
$(notdir names...)スラッシュを含まない場合はそのまま返します。含む場合は、最後のスラッシュまでが削除されます。
notdir:
echo $(notdir src/main.c Makefile)$ make notdir
echo main.c Makefile
main.c Makefilerealpath
realpath は names... の realpath を返します。失敗した場合は空の文字列を返します。
$(realpath names...)realpath:
echo $(realpath src/main.c Makefile)make realpath
echo /work/example/009/Makefile
/work/example/009/Makefile詳しくは man 3 realpath を参照してください。
簡素な Makefile ではワーキングディレクトリからの相対パスで事足りるため、あまり使う機会はないかもしれません。
abspath
abspath は names... の各ファイル名に対して、絶対パスを返します。
$(abspath names...)realpath とは対照的に、abspath はシンボリックリンクを解決せず、ファイルやディレクトリが存在するかをチェックしません。
存在するファイル名だけを扱いたい場合には wildcard 関数を使います。
abspath:
echo $(abspath src/main.c Makefile)make abspath
echo /work/example/009/src/main.c /work/example/009/Makefile
/work/example/009/src/main.c /work/example/009/Makefilewildcard
wildcard はワイルドカード(*)を含むパターンに一致し存在するファイル名を返します。
$(wildcard pattern)wildcard:
echo $(wildcard *e)ls
Makefile fuga hoge
make wildcard
echo hoge Makefile
hoge Makefile