2

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

2 回答 2

3

也许是这样的:

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

all: $(APPS)

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

不过,不完全确定我是否正确理解了您的要求。似乎有点复杂的设置...

于 2013-07-02T16:08:27.243 回答
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))

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

于 2013-07-02T17:21:47.387 回答