web-dev-qa-db-ja.com

Makefileの%記号の意味

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

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

これは機能しません

SOURCE := $(wildcard *.c)

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

どちらの式もすべてのファイルを指定します。それで、メイクファイルの%。o:シンボルは何をしますか?

10
Mero

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

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

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

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

もう1つの注意点として、StackOverflowでmakeを使用する方法を学習することはありません。代わりに本を読むことを検討する必要があります。

9
Satō Katsura

構成:

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

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

_SOURCE := $(wildcard *.c)

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

標準ルールですが、(おそらく)manyターゲットとmany依存関係。それでも、それはすべて$(CC)を1回だけ呼び出します。

10
Stephen Rauch