Makefileの%記号の意味


10

私はメイクファイルで遊んでいて、 . oまたは%.cに出くわしました。私が理解したことから、それはすべてのcまたはoファイルを指定します。しかし、なぜこれが機能するのか:

%.o: %.c
        $(CC) -c $^  -o $@  

これは機能しません

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@

どちらの式もすべてのファイルを指定します。では、%。o: makeファイルのシンボルは何をしているのでしょうか?

回答:


9

どちらの式もすべてのファイルを指定します。

いいえ、最初のルールは、対応するファイルを指定してファイルmakeを取得する方法を示しています。単数形に注意してください:単一のファイル。.o.c

2番目のルール(要求)は、対応するファイルの別の束が与えられた場合に、ファイルのmake束を取得する方法を示しています。複数形に注意してください:グロビングから生じるすべてのファイル。.o.c.c*.c

余談ですが、%.o: %cはGNU拡張です。

もう1つの注意点として、makeStackOverflowでの使用方法を学習しません。代わりに本を読むことを検討してください。


11

構成:

%.o: %.c
        $(CC) -c $^  -o $@  

は、暗黙のルールの一種であるパターンルールです。これは、1つのターゲットと1つの依存関係を指定$(CC)し、ターゲットごとに1つのを呼び出します。この間:

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@

標準的なルールですが、(おそらく)多くのターゲットと多くの依存関係があります。それでも、それはすべて、$(CC)一度だけ呼び出されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.