Here本教程对它进行了相当精美的解释,其中大部分工作正常。以下是本教程最后的Makefile它假设你有一个像下面这样的目录结构:在make中自动生成依赖关系并将它们包括在依赖项列表中
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
我不明白教程中的一件事。它说pull in dependency info for *existing* .o files
和相应的.d
文件被创建,但是这些文件是如何处理的,因为在仍然保留%.o: %.c
的目标的依赖列表中没有对其进行修改。
事实上,从我注意到它只是不适合我。任何人都可以解释这里发生了什么。如果本教程有误(我非常怀疑),请提及如何将依赖项从.d
文件包含到依赖项列表中。
但仍然依赖列表仍然是“%.o:%.c”。内部做这件事。 –
更新了答案 – perreal