我想建立一个功能到我的makefile,让我来指定库列表中的特定库依赖于
这将允许图书馆的家属自动重建,如果该库的依赖关系重建,也有添加到链接线的依赖关系。
我问的SO一个相关的问题在这里 ,并通过给定答案的工作,我想出了下面的测试
uniq = $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1)))
expand-deps = $1 $(foreach _,$1, $(call expand-deps,$($__deps)))
make-dep-list = $(call uniq,$(call expand-deps,$1))
define make-lib
$(warning $1_deps: $2)
# capture the list of libraries this library depends on
$1_deps = $2
endef
define make-bin
# show the fully expanded list of libraries this binary depends on
$(warning $1 dep-list: [$(call make-dep-list,$2)])
endef
#$(eval $(call make-lib, thread, log utils)) circular-dependency log->thread; thread->log
$(eval $(call make-lib, thread, utils))
$(eval $(call make-lib, log, thread))
$(eval $(call make-lib, order, log))
$(eval $(call make-lib, price, log))
$(eval $(call make-bin, test, order price))
运行以上生成文件产生以下结果:
$ make
makefile:15: thread_deps: utils
makefile:16: log_deps: thread
makefile:17: order_deps: log
makefile:18: price_deps: log
makefile:19: test dep-list: [order price log thread utils ]
make: *** No targets. Stop.
这是可能的图书馆有循环依赖。
作为一个例子:该日志库是多线程的,所以,需要线程库。 线程库可以发出日志报表,所以需要日志库。
如果我取消了具有循环依赖行
$(eval $(call make-lib, thread, log utils))
$(eval $(call make-lib, log, thread))
生成文件会卡死在一个无限循环。
我怎么能允许用户指定循环依赖,并打破了无限循环的?