我有一个别人写的包;我无法更改该包中的文件。在那个包中有一个Makefile,它的规则如下:
$(BIN)/progA: <long list of .o files>
$(LINK.cc) $^ -o $@
我想围绕该 Makefile 编写一个 GNU make“包装器”来构建一个库,而不是来自同一 .o 文件列表的二进制文件。理想情况下,我想要这样的东西:
include package/Makefile
$(LIB)/progA.so: <magically copy the prerequisites for $(BIN)/progA>
$(LD) -shared $(LDFLAGS) $^ $(LIBS) -o $@
当然,我可以将包的 Makefile 中的列表复制粘贴到我的,但该包经常更新;如果我的构建过程会自动神奇地在其 Makefile 中获取对包更改的任何更改,我更喜欢它。
我唯一的其他解决方案是复杂的:使用 sed 或 awk 或 perl 扫描包的 Makefile,提取 .o 文件列表,并将其分配给我的包装器 make 文件中的变量。如果可以的话,我想避免这种情况。