我有几个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)
答案 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>