我有一堆我想要构建为依赖项的库:
LIBS = libs/foo libs/bar
每个库都有一个我需要编译的对象,所有这些都在一个可预测的位置。他们是:
libs/foo/lib/libfoo-O3.a
libs/bar/lib/libbar-O3.a
我想有效地将LIBS
字符串转换为以下规则:
build : libs/foo/lib/libfoo-O3.a libs/bar/lib/libbar-O3.a
libs/foo/lib/libfoo-O3.a:
$(MAKE) -C libs/foo
libs/bar/lib/libbar-O3.a:
$(MAKE) -C libs/bar
我知道你不能两次使用%
,所以不幸的是libs/%/lib/lib%-O3.a
是一个非首发目标。还有另一种方法吗?有define
模板的东西吗?
答案 0 :(得分:2)
如果您可以将LIBS变量更改为仅包含名称,则可以轻松完成:
LIBS = foo bar
LIBPATHS := $(foreach L,$(LIBS),libs/$L/lib/lib$L-O3.a)
如果你仍然可以做到这一点,那么可读性稍差:
LIBS = libs/foo libs/bar
LIBPATHS := $(foreach L,$(LIBS),$L/lib/lib$(notdir $L)-O3.a)
然后添加如下内容:
$(LIBPATHS):
$(MAKE) -C $(firstword $(subst /lib/, ,$@))