make・Makefile - 関数 $(関数)


 クラウディア


1. 概要
2. 置換 $(subst)
3. ワイルドカード $(wildcard)
4. ディレクトリ以外を取り出し $(notdir)
5. 例外を設定 $(filter-out)

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
 おわかりかと思いますが、除外するファイル名は、空白で区切って複数指定することができます。

audiobook.jp
5G CONNECT
ネットオークションの相場、統計、価格比較といえばオークファン
サウンドハウス
葬送のフリーレン Prime Video
損保との違い
アフィリエイトのアクセストレード
ベルリッツ
Amazonギフトカード
JETBOY
【usus ウズウズ】
ハイスピードプラン
薬屋の独り言
それがだいじWi-Fi
健康サポート特集
TikTok Shop 【リピート用プログラム】
U-NEXT
earthcar(アースカー)