如何从主Makefile中调用多个Makefile都在同一目录中

时间:2013-07-02 15:32:12

标签: makefile

我有几个Makefile,每个可执行文件一个,说Makefile.exec1,Makefile.exe2

以下是这些结构:

SRC_CPPS = test2.cpp
EXEC     = test2

# uncomment for debug mode
_DEBUG=YES

include utils/sample.Makefile

sample.Makefile为要链接的库定义了一些环境变量,并定义了一些从SRC_CPPS生成EXEC的规则。

我想写一个主Makefile来运行所有的Makefile.something。 这是一个尝试,它不起作用:

MAKEFILES= $(shell ls Makefile.* | grep -v "~")

all:
    $(foreach var,$(MAKEFILES), make -f $(var))

clean:
    $(foreach var,$(MAKEFILES), make -f $(var) clean)

2 个答案:

答案 0 :(得分:3)

也许是这样的:

MAKEFILES=$(wildcard Makefile.*)
APPS=$(subst Makefile.,,$(MAKEFILES))

all: $(APPS)

%: Makefile.%
        $(MAKE) -f $<

但不完全确定我理解你的要求。看起来有点令人费解的设置...

答案 1 :(得分:1)

请记住,在调用子品牌时永远不要使用make。始终使用$(MAKE)

我推荐这样的东西:

MAKEFILES := $(filter-out %~,$(wildcard Makefile.*))

all: $(addprefix all.,$(MAKEFILES))

$(addprefix all.,$(MAKEFILES)): all.%:
        $(MAKE) -f $* all

clean: $(addprefix clean.,$(MAKEFILES))

$(addprefix clean.,$(MAKEFILES)): clean.%:
        $(MAKE) -f $* clean

.PHONY: all $(addprefix all.,$(MAKEFILES)) clean $(addprefix clean.,$(MAKEFILES))

但是,我不会这样做。这是一个额外的开销,调用递归make。如果您重新调整个人Makefile.*,以便他们不使用完全相同的变量名来保存源,您可以在顶级makefile中使用include $(filter-out %~,$(wildcard Makefile.*)),并在不递归的情况下构建所有内容。 / p>