【发布时间】:2016-01-23 08:56:25
【问题描述】:
假设我有这个 GNU makefile:
SOURCE = source1/a source2/b source3/c
BUILD = build/a build/b build/c
BASE = build/
$(BUILD): $(BASE)%: %
install $< $@
所以基本上我在 source1、source2 和 source3 目录中都有文件,我想将它们放入 build 目录。
我想用一个静态模式规则来完成这个。我幼稚的做法是这样的:
$(BUILD): $(BASE)%: $(filter *%, $(SOURCE))
install $< $@
这不起作用。我知道过滤器也用百分号表示。
$(BUILD): $(BASE)%: $(wildcard */$(notdir %))
install $< $@
这也不起作用。但即便如此,这仍然不能令人满意,因为我可能想touch 一个新文件 source1/b,这会搞砸一切。
如何在 GNU makefile 静态模式规则中使用 $(filter) 函数?还是有其他方法可以做到这一点?
层次结构现在如下所示:
source1/
a
source2/
b
source3/
c
build/
我希望它看起来像这样:
source1/
a
source2/
b
source3/
c
build/
a
b
c
【问题讨论】:
-
如果你有
source1/b和source2/b,那么你想在build/里面放什么? -
我想把
a、b和c放到build中。 -
哪个
b你想放入build/?你说你可能想在source2/b之外介绍source/b,但你没有说你想让Make在这种情况下做什么。 -
哦,对不起,我看错了你的答案!我想将
source2/b放入构建中,因为它位于$(SOURCE)变量中。我认为这个问题不能在make中得到适当的解决,所以我会在make之外这样做。