对规则进行过滤

时间:2011-10-14 06:14:55

标签: windows linux makefile

我有像

这样的制作规则

app.o: app.c b.c a.c h.h file.list

我正在使用规则$^对所有依赖项执行某些操作。 但我想根据依赖项上的文件扩展名进行过滤。 我怎么能这样做?

我想要一个变量

k = (which contain only .c file from dependency list )

1 个答案:

答案 0 :(得分:2)

如果您使用 GNU Make ,而不是

$(filter %.c,$^)

将执行该技巧(过滤器返回与列表中的给定模式匹配的所有单词,过滤器返回不匹配的单词)。如果你正在使用一些更原始的make,你将不得不求助于

APP_O_C_DEPS = app.c b.c a.c
APP_O_NONC_DEPS = h.h file.list
app.o: $(APP_O_C_DEPS) $(APP_O_NONC_DEPS)
        ...

注意:变量在Make中的工作方式允许你说

c_deps = $(filter %.c,$^)
app.o: app.c b.c a.c h.h file.list
    something $(c_deps)

它将扩展到当前目标的.c依赖项。