December 09, 2020

ファイル名の関数

ファイル名に関する関数には dirnotdirrealpathabspathwildcard などがあります。

他にも suffixaddsuffix などの便利な関数がありますが、あまり使わないので必要に応じて調べて使うとよいと思います。

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 Makefile

realpath

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/Makefile

wildcard

wildcard はワイルドカード(*)を含むパターンに一致し存在するファイル名を返します。

$(wildcard pattern)
wildcard:
	echo $(wildcard *e)
ls
Makefile  fuga  hoge
make wildcard
echo hoge Makefile
hoge Makefile

リンク