我正在尝试创建一个创建自定义文件系统的 Makefile,我的问题是在其中复制一些包。我需要处理一个包含我需要包含的所有包的目录,但每个包可能包含也可能不包含描述其依赖关系的相关文件。这是我尝试做的摘录:
PKGS_DIR := $(shell pwd)/packages
PKGS := $(wildcard $(PKGS_DIR)/*.pkg)
.PHONY: $(PKGS)
define getdeps
@if [ ! -f $(2)/$(1) ]; then \
echo $(1) >> $(BASE_DIR)/deplist.tmp; \
if [ -f $(PKGS_DIR)/$(1).dep ]; then \
depapps=`cat $(PKGS_DIR)/$(1).dep`; \
$(foreach depapp,$$depapps,\
$(call getdeps,$(depapp),$(BASE_DIR)/optional); \
) \
fi \
fi
endef
$(PKGS):
@echo processing $(notdir $@)
$(call getdeps,$(notdir $@),$(BASE_DIR)/optional)
使用此代码,我的 makefile 崩溃,因为它进入无限循环,我不明白为什么。我的问题是:是否可以在宏定义中进行递归调用?有没有更好的方法来实现这一点?也许使用 shell 脚本来实现它并在我的 makefile 中调用它会更好。
任何建议将不胜感激。
提前致谢