Makefile 学習 1 - ファイル名ワイルドカード

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 つの場面 (ルールのターゲットと依存関係で使用される場合とコマンドで使用される場合) と、ワイルドカードが適用できない場合 (変数の定義) を紹介します。また、変数の定義に適用されるワイルドカードについても紹介し、最後にその使用法を示します。

おすすめ

転載: blog.csdn.net/to_be_better_wen/article/details/130021611