我有一个看起来像这样的项目结构:
.
└── 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 "$@" $^;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)