Makefile 用相同的图案制作目标两次
我有很多库,我想作为依赖项构建它们:Makefile 用相同的图案制作目标两次,makefile,Makefile,我有很多库,我想作为依赖项构建它们: 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) -
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
作为目标是不可能的。还有别的办法吗?带有定义模板的内容?如果可以将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/, ,$@))