首页 > 解决方案 > 在 patsubst 中使用 % 两次

问题描述

我想为每个输入词生成两个输出词,它们是连续的,并应用于patsubst它们。

我想要的非工作原型:

$(patsubst %.o,%.a.o %.so.o,$(OBJ))

% 的第二次出现没有被替换,而是%出现了一个普通的。

没有给出所需顺序的工作版本:

$(patsubst %.o,%.a.o,$(OBJ)) $(patsubst %.o,%.so.o,$(OBJ))

例子:

输入:

foo.o bar.o

期望的输出:

foo.a.o foo.so.o bar.a.o bar.so.o

如何获得所需的输出?

标签: makefilegnu-make

解决方案


两个嵌套的 foreach 循环可以解决您的问题。一个用于文件,另一个用于扩展。下面的代码应该可以解决您的问题。

OBJS = foo.o bar.o
EXTS = a.o so.o

OUT  = $(foreach file, ${OBJS}, \
         $(foreach ext, ${EXTS}, \
           $(patsubst %.o, %.${ext}, ${file})))

推荐阅读