2017-02-28 12 views
0

下記のMakefileスニペットで変数%がどのように使用されているのか、グーグルリングはあまり役立ちません。Makefileの '%'の意味は何ですか?

_OBJ = a.o b.o c.o 
OBJ = $(patsubst %,$(OBJDIR)/%,$(_OBJ)) 

$(OBJDIR)/%.o: $(SRCDIR)/%.c $(INC) 
    $(CC) -c -o [email protected] $< $(CFLAGS) 

誰でもお手伝いできますか? $(SRCDIR)の下に5つの.cファイルがある場合、多くの*.oルールがシーンの後ろに配置されていることを意味しますか?

答えて

1

"implicit rule"です。 %は、単語$(OBJDIR)/%.oのパターンにします。ターゲットにビルドしようとしたときにターゲットの名前がそのパターンと一致する場合(%は1つ以上の文字の代わりに使用できます)、パターン$(SRCDIR)/%.cに一致するファイル(%ここではターゲットと同じ値を持っています)がすでに存在しているか、またはビルド可能であれば、makeはこのレシピを使用してそのターゲットを構築できます。 makeはファイルfoo/bar.oを構築したいと変数OBJDIRが値fooを持っている場合

ので、このパターンfoo/%.o%barに一致すると、そのファイルにマッチします(これはドキュメントを作るGNUにと呼ばれています) 。 SRCDIRblah/bar.cという名前のファイルを値blahがあり、見つけることができます作成​​(または作成する)場合

次に、この暗黙のルールがこのレシピ($(CC) -c -o [email protected] $< $(CFLAGS))を実行することにより、ターゲットfoo/bar.oを構築するために使用することができます。

+0

パーフェクト、完璧な意味合いがこの例と結びついています。 –

関連する問題