私はメイクファイルで遊んでいて、%。oまたは%。cに遭遇しました。私が理解したことから、それはすべてのcまたはoファイルを指定します。しかし、なぜこれが機能するのか:
%.o: %.c
$(CC) -c $^ -o $@
これは機能しません
SOURCE := $(wildcard *.c)
$(SOURCE:.c=.o): SOURCE
$(CC) -c $^ -o $@
どちらの式もすべてのファイルを指定します。それで、メイクファイルの%。o:シンボルは何をしますか?
どちらの式もすべてのファイルを指定します。
いいえ、最初のルールはmake
に、対応する.o
ファイルを指定して.c
ファイルを取得する方法を指示します。単数形に注意してください:単一のファイル。
2番目のルール(要求)は、対応する.o
ファイルの別の束が与えられた場合に、make
に.c
ファイルの束を取得する方法を伝えます。複数形に注意してください:すべての.c
ファイルは*.c
グロビングから生じます。
余談ですが、%.o: %c
はGNU拡張です。
もう1つの注意点として、StackOverflowでmake
を使用する方法を学習することはありません。代わりに本を読むことを検討する必要があります。
構成:
_%.o: %.c
$(CC) -c $^ -o $@
_
パターンルール です。これは、暗黙のルールの一種です。 oneターゲットとone依存関係を指定し、$(CC)
を1回呼び出しますターゲットごとに。この間:
_SOURCE := $(wildcard *.c)
$(SOURCE:.c=.o): SOURCE
$(CC) -c $^ -o $@
_
標準ルールですが、(おそらく)manyターゲットとmany依存関係。それでも、それはすべて$(CC)
を1回だけ呼び出します。