(免责声明:我习惯了......我对制作有点缺乏经验)
上下文:我正在使用生成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
答案 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