【发布时间】:2015-01-08 08:58:21
【问题描述】:
我想创建一个语言依赖目标。特别是:我有一个源文件,我想创建不同的对象,这些对象添加到相应的语言文件夹中。那个单一的源文件在 C 标志中会有所不同,编译器会得到。只要我以静态方式使用它,它就可以很好地工作。
de/info.o en/info.o es/info.o : info.c
$(ECHO) (DEP) $< for $@
现在我想,如果它更动态一点会很棒,以防我添加新的语言依赖文件。所以我使用了如下通配符:
de/%.o en/%.o es/%.o : %.c
$(ECHO) (DEP) $< for $@
但现在它只制作第一个目标而忽略其余的。 Make-Debug 打印以下内容:
Successfully remade target file `de/info.o'.
Considering target file `en/info.o'.
File `en/info.o' was considered already.
以防万一:不,对象不存在。所以没有目标,只有一个存在的依赖,所以 make 应该执行规则。
编辑:找到该问题的解决方案。
define FOO
$(1)/%.o : %.c
$(ECHO) $$< for $(1)
endef
$(foreach lang,$(LANGUAGE_LIST), $(eval $(call FOO,$(lang))))
灵感来自:http://www.gnu.org/software/make/manual/make.html#Eval-Function
【问题讨论】: