私はmakefileで遊んで偶然発見しました。%。または%.氏。私が理解しているところによると、すべてを指定します。氏またはああ文書。しかし、これがうまくいく理由は次のとおりです。
%.o: %.c
$(CC) -c $^ -o $@
これはうまくいきません
SOURCE := $(wildcard *.c)
$(SOURCE:.c=.o): SOURCE
$(CC) -c $^ -o $@
両方の式はすべてのファイルを指定します。だから何%。makeファイルのシンボルは何をしますか?
答え1
構造:
%.o: %.c
$(CC) -c $^ -o $@
はパターンルール、これは暗黙のルールです。それは指定する一つ目標と一つ$(CC)
依存関係を持ち、ターゲットごとに一度呼び出されるようにします。しかし、これは:
SOURCE := $(wildcard *.c)
$(SOURCE:.c=.o): $(SOURCE)
$(CC) -c $^ -o $@
標準ルールですが(おそらく)たくさん目標とたくさん依存関係。しかし、それにもかかわらず一度だけ呼び出されます$(CC)
。
答え2
両方の式はすべてのファイルを指定します。
いいえ、最初のルールは、そのファイルが提供されたファイルを取得するmake
方法を示します。単数形:単一ファイルに注意してください。.o
.c
2番目のルール(クレーム)は、そのファイルの別のバンドルが与えられたときにファイルのバンドルをmake
取得する方法を示します。複数形:ワイルドカードで作成されたすべてのファイルに注意してください。.o
.c
.c
*.c
ちなみに%.o: %c
GNU拡張です。
一方、make
StackOverflowの使い方は学びません。本を読むことを検討してください。