GNU Make:使用带有隐含规则的通配符函数



我有一个项目结构,看起来像这样:

.
└── src
├── Module1
│   ├── source1.cc
│   ├── source2.cc
│   └── source3.cc
├── Module2
│   ├── source1.cc
│   ├── source2.cc
│   └── source3.cc
└── Module3
├── source1.cc
├── source2.cc
└── source3.cc

我有一个隐式规则,它将为每个源文件创建一个对象文件,并维护目录结构(例如src/Module1/source2.cc将编译为obj/Module1/source2.o(。

但是,我现在希望有一个隐式规则来为每个模块创建归档文件。例如,从src/Module2编译的每个对象文件都将添加到obj/Module2.a中。我的第一个想法看起来与我对对象文件的隐含规则非常相似:

obj/%.a: $(wildcard obj/%/*.o)
@mkdir -p $(@D);
ar -crs "$@" $^;

这将把编译对象文件的工作传递给另一个隐式规则。但是,这里的问题是%字符没有展开。

有没有办法从通配符函数调用中的隐式规则访问%

您可以使用二次扩展:

.SECONDEXPANSION:
obj/%.a: $$(wildcard obj/%/*.o)
@mkdir -p $(@D);
ar -crs "$@" $^;

相关内容

  • 没有找到相关文章