通过递归调用构建依赖关系make?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过递归调用构建依赖关系make?相关的知识,希望对你有一定的参考价值。
我已经阅读了一些文章,解释了在使用子目录编译项目时递归makefile是如何邪恶的。
但是,我发现了这种自动生成依赖关系的方法
exec = main
objs = main.o A.o B.o C.o # main and object modules
deps = $(objs:.o=.d) # dependencies file
all: $(deps)
$(MAKE) $(exec)
-include $(deps)
%.d: %.c # how to build dependency files
$(CC) -MM $(CFLAGS) $< > $@
main: $(objs) # How to build the main exec
构建目标“all”会根据需要更新依赖项文件,然后在需要时考虑重建主exec。
这种方法有根本缺陷吗?
如果你正在使用GNU make,那么这个hack是不必要的。 GNU make是smart enough自动重建包含的任何(make)文件,然后重启自己:
由于'.d'文件与其他文件一样是makefile,因此make会根据需要重新制作它们,而无需您进一步处理。见Remaking Makefiles。
关于其他make实现,GNU make手册有这样的说法:
对于旧的make程序,传统的做法是使用[-M]编译器功能通过“make depend”之类的命令按需生成先决条件。该命令将创建一个包含所有自动生成的先决条件的文件。然后makefile可以使用include来读取它们(参见Include)。
正如其他贡献者所说,gnu将.d依赖项文件视为Makefile,并在需要时自动重建它们。
这使得递归调用变得不必要,并且问题变得平淡。
当然,像往常一样,“被认为是有害的”纸质书籍必须用一丝盐阅读,如果真的完全阅读,从悠久的传统(克努斯的“反驳”Dijkstra的论文引用Disjktra自己的恐惧被认为是非常教条“和”其他人制造它的宗教“。”狂热的拥护者越过董事会“!)。
以上是关于通过递归调用构建依赖关系make?的主要内容,如果未能解决你的问题,请参考以下文章
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段