GNU Make:将通配符函数与隐式规则一起使用

问题描述 投票:0回答:1

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

.
└── 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 "$@" $^;

这将把目标文件编译成另一个隐式规则。但是,这里的问题是%字符未展开。

是否可以通过通配符函数调用中的隐式规则访问%

makefile gnu-make gnu ar
1个回答
1
投票

您可以使用Secondary Expansion

.SECONDEXPANSION:
obj/%.a: $$(wildcard obj/%/*.o)
    @mkdir -p $(@D);
    ar -crs "$@" $^;
© www.soinside.com 2019 - 2024. All rights reserved.