Inheritance gnumake:继承另一个规则';先决条件

Inheritance gnumake:继承另一个规则';先决条件,inheritance,makefile,prerequisites,Inheritance,Makefile,Prerequisites,我有一个别人写的包裹;我无法更改该包中的文件。在该包中有一个Makefile,其规则如下: $(BIN)/progA: <long list of .o files> $(LINK.cc) $^ -o $@ include package/Makefile $(LIB)/progA.so: <magically copy the prerequisites for $(BIN)/progA> $(LD) -shared $(LDFLAGS) $^

我有一个别人写的包裹;我无法更改该包中的文件。在该包中有一个Makefile,其规则如下:

$(BIN)/progA:   <long list of .o files>
    $(LINK.cc) $^ -o $@
include package/Makefile

$(LIB)/progA.so: <magically copy the prerequisites for $(BIN)/progA>
    $(LD) -shared  $(LDFLAGS) $^ $(LIBS) -o $@
$(BIN)/progA:
$(LINK.cc)$^-o$@
我想围绕这个Makefile编写一个GNU make“包装器”,以构建一个库,而不是从相同的.o文件列表中生成一个二进制文件。理想情况下,我想要这样的东西:

$(BIN)/progA:   <long list of .o files>
    $(LINK.cc) $^ -o $@
include package/Makefile

$(LIB)/progA.so: <magically copy the prerequisites for $(BIN)/progA>
    $(LD) -shared  $(LDFLAGS) $^ $(LIBS) -o $@
include包/Makefile
$(LIB)/progA.so:
$(LD)-共享$(LDFLAGS)$^$(LIBS)-o$@
当然,我可以将列表从包的Makefile复制粘贴到我的Makefile中,但该包经常更新;如果我的构建过程能够自动神奇地在其Makefile中拾取对包的任何更改,那么我更愿意这样做


我唯一的另一个解决方案是复杂的:使用sed、awk或perl扫描包的Makefile,拉出.o文件列表,并将其分配给包装器make文件中的一个变量。如果可以的话,我想避免这种情况。

我有两个想法:

首先,运行如下操作:

make -n bin/progA LINK.cc='OBJECTS:' | grep ^OBJECTS:
然后捕获输出。但是,您必须手动从结果中删除
-o

另一个想法是运行“make-pn”来获取make数据库的副本,然后用grep或其他什么工具解析它


与直接查看makefile相比,这些方法的优点在于,make会为您扩展任何变量等。

如果您对解决方案感到满意,请单击其旁边的复选标记接受它。如果包经常更新,提交一个功能请求,以便他们将目标文件放入
OBJS
变量中,而不是在规则中硬编码;我无法更改该包中的文件。这一要求不现实。如果你有自己的电脑和文件副本,你可以做任何你想做的事。您可以应用修补程序,导入到维护自己分支的存储库中,等等。