Makefile-如何调用具有依赖项的其他Makefile
嘿,我有一个简单的“主”Makefile,它只调用其他Makefile。为了以正确的顺序构建组件,我尝试执行以下操作:Makefile-如何调用具有依赖项的其他Makefile,makefile,Makefile,嘿,我有一个简单的“主”Makefile,它只调用其他Makefile。为了以正确的顺序构建组件,我尝试执行以下操作: LIB_A = folder_a LIB_B = folder_b LIB_C = folder_c MY_TARGETS = $(LIB_A) $(LIB_B) $(LIB_C) .PHONY: $(LIB_A) $(LIB_A): @$(MAKE) -C $@; .PHONY: $(LIB_B) $(LIB_B): @$(MAKE) -C $@; .
LIB_A = folder_a
LIB_B = folder_b
LIB_C = folder_c
MY_TARGETS = $(LIB_A) $(LIB_B) $(LIB_C)
.PHONY: $(LIB_A)
$(LIB_A):
@$(MAKE) -C $@;
.PHONY: $(LIB_B)
$(LIB_B):
@$(MAKE) -C $@;
.PHONY: $(LIB_C)
$(LIB_C): $(LIB_A) $(LIB_B)
@$(MAKE) -C $@;
.PHONY: all
all: $(MY_TARGETS)
然而,当我制作时,只生成LIB_A
(我甚至没有收到文件夹中的最新消息或任何东西)
有什么提示吗?您需要将
all
设为默认值。您可以通过以下任一方式执行此操作:
- 将其移动为文件中的第一个目标
- 添加
。默认目标:=all
或者,您可以运行
make all
,而不是只运行make
Neil Butterworth解决了这个问题,但您也可以使这个make文件更简洁一些:
LIB_A = folder_a
LIB_B = folder_b
LIB_C = folder_c
MY_TARGETS = $(LIB_A) $(LIB_B) $(LIB_C)
.PHONY: all $(MY_TARGETS)
all: $(MY_TARGETS)
$(MY_TARGETS):
@$(MAKE) -C $@;
$(LIB_C): $(LIB_A) $(LIB_B)
巴特沃斯:真的。这完全解决了问题。我不知道目标的顺序有什么影响。@turbo一般来说,顺序并不重要,只是默认值是第一个。您还可以使用我忘记的一些语法指定默认值:-),您当然可以说
make all
,并且您的原始make文件应该可以工作。如果将来有人阅读此文件,您要查找的语法是。default\u GOAL:=all
(或者您的目标是什么)。在本例中,如何定义clean来清除所有模块?@nilo:我将命令更改为@$(MAKE)-C$@$(TARG)
,然后添加clean
规则:clean:TARG=cleanclean:all