I.はじめに
使用できるワイルドカードは「*」、「?」、「[...]」です。たとえば、*.c は現在の作業ディレクトリ内の .c で終わるすべてのファイルを意味しますが、Makefile ではこれらのワイルドカードは使用できません。どこでも。
2. ワイルドカードの使用
Makefile 内のワイルドカードは、次の 2 つの状況で使用される可能性があります。
1. ルールで使用されるターゲットと依存関係
Make は、Makefile を読み取るときに自動的に一致します。例は次のとおりです。
# 打印当前工作目录的全部的.c文件
print: *.c
ls $?
2. ルールのコマンドで使用
ワイルドカード処理は、シェルがコマンドを実行するときに実行されます。例は次のとおりです。
# 删除所有的.o文件
clean:
rm -f *.o
Makefile のワイルドカードが適用できない場合
1. 変数定義にワイルドカードを使用する
例は次のとおりです。
objects = *.o
foo : $(objects)
cc -o foo $(CFLAGS) $(objects)
上記のオブジェクトは、すべての「.o」ファイルのリストではなく、文字列「*.o」になります。ここで、すべての「.o」ファイルが削除された場合、「cc -o foo $(CFLAGS) $(objects)」コマンドはエラーを報告します。
ここではワイルドカードが必要であり、正しい使用法はobject = $(wildcard *.o)である必要があります。
3. ワイルドカード機能の使用
ルールではワイルドカードは自動的に展開されますが、変数の定義や関数の使用ではワイルドカードは無効になります。この時点で、まだワイルドカードを機能させたい場合は、「wildcard」関数を使用する必要があります。
1. 使用方法
$(ワイルドカードパターン)
2.効果
パターンに一致するすべてのファイルの既存のスペース区切りリストに展開されます。パターンに一致するファイルが存在しない場合、関数はパターン文字を無視し、null を返します。
3. ケース
サンプルコードは次のとおりです。
objects := $(patsubst %.c,%.o,$(wildcard *.c))
target:$(objects)
cc -o target $(objects)
まず $(wildcard *.c) を使用して現在の作業ディレクトリ内のすべての「.c」ファイル名を取得し、次に関数 patsubst を使用して「.c」ファイル名を「.o」ファイル名に置き換えて割り当てます。オブジェクト変数に。cc -o target $(objects) も Makefile の暗黙のルールを使用することに注意してください。
4. まとめ
この記事では、ワイルドカードの意味を紹介し、ワイルドカードが適用される 2 つの場面 (ルールのターゲットと依存関係で使用される場合とコマンドで使用される場合) と、ワイルドカードが適用できない場合 (変数の定義) を紹介します。また、変数の定義に適用されるワイルドカードについても紹介し、最後にその使用法を示します。