ここで、このチュートリアルはそれを非常に美しく説明しており、ほとんどはうまく機能します。以下は、次のようなディレクトリ構造があることを前提としたチュートリアルの最終的な Makefile です。
root-----Makefile
|-----All source files here.
コンパイルの結果はroot
ディレクトリにあります。以下は Makefile です。
OBJS := foo.o bar.o
# link
proggie: $(OBJS)
gcc $(OBJS) -o proggie
# pull in dependency info for *existing* .o files
-include $(OBJS:.o=.d) #NOTE THIS
%.o: %.c #NOTE THIS
gcc -c $(CFLAGS) $*.c -o $*.o
gcc -MM $(CFLAGS) $*.c > $*.d
@cp -f $*.d $*.d.tmp
@sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \
sed -e 's/^ *//' -e 's/$$/:/' >> $*.d
@rm -f $*.d.tmp
# remove compilation products
clean:
rm -f proggie *.o *.dOBJS := foo.o bar.o
チュートリアルで1つだけわからないことがあります。それはpull in dependency info for *existing* .o files
、対応する.d
ファイルが作成されますが、まだ残っているターゲットの依存関係リストに変更が加えられていないため、これらはどのように処理されますか%.o: %.c
。
実際、私が気づいたことから、それは私にはうまくいきません。ここで何が起こっているのか誰でも説明できますか。.d
このチュートリアルが間違っている場合 (私は非常に疑いがあります)、ファイルから依存関係を依存関係リストに含める方法について言及してください。