make:分层make文件

时间:2009-09-30 13:43:55

标签: build-process makefile

(免责声明:我习惯了......我对制作有点缺乏经验)

上下文:我正在使用生成makefile的Eclipse CDT。

假设我有一个项目目录'lib'和2个构建配置'Debug'和'Release'。 Eclipse CDT可以为每个构建配置正常生成makefile。所述makefile最终位于“Debug”和“Release”文件夹中。

现在,我想要做的是在'lib'文件夹中有一个makefile,其中调用 makefile'Debug / makefile'和'Release / makefile'。

我该怎么做?

我希望能够在'lib'文件夹中启动'make',并且将使用指定的目标调用这两个配置。

解决方案 基于这里收集的所有重要意见,我设计了以下内容:

MAKE=make
BUILDS=Release Debug
TARGETS=all clean

$(TARGETS):
    @for b in $(BUILDS) ; do $(MAKE) -C $$b $@ ; done

$(BUILDS):
    @for t in $(TARGETS) ; do $(MAKE) -C $@ $$t ; done

%:
    @for b in $(BUILDS) ; do $(MAKE) -C $$b $@ ; done

4 个答案:

答案 0 :(得分:3)

取决于什么是“电话”。你想要

  

include $(BUILD)/Makefile

  

$(MAKE) -C $(BUILD) $@

或其他一些。我猜你想要后者。也许像是

release debug:
    $(MAKE) -C $@

你明白了。

更多例子:

BUILDS=release debug
TARGETS=all clean

$(TARGETS):
    for b in $(BUILDS) ; do $(MAKE) -C $$b $@ ; done

$(BUILDS):
    for t in $(TARGETS) ; do $(MAKE) -C $@ $$t ; done

答案 1 :(得分:2)

由于你提到“指定的目标”,我建议:

%:
    $(MAKE) -C Debug $@
    $(MAKE) -C Release $@

如果这太笼统了,你可以用$(TARGETS)替换%,其中TARGETS是你定义的东西,是你想要做的所有事情的列表。

答案 2 :(得分:1)

all: release debug

release:
   $(MAKE) -C ../Release

debug:
   $(MAKE) -C ../Debug

我假设他们都处于同一水平。路径必须来自您调用Make的位置。

答案 3 :(得分:-2)

具有在两个目录中调用makefile的不同目标。

all: debug product

debug:
        $(MAKE) -f debug/Makefile

product:
        $(MAKE) -f product/Makefile