【发布时间】:2013-09-25 16:47:43
【问题描述】:
我有一个别人写的包;我无法更改该包中的文件。在那个包中有一个 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 文件中的变量。如果可以的话,我想避免这种情况。
【问题讨论】:
-
如果包更新频繁,请提交功能请求,以便他们将目标文件放在
OBJS变量中,而不是在规则中硬编码。 -
> 我有一个别人写的包;我无法更改该包中的文件。 这个要求是不现实的。如果您有自己的计算机和文件的副本,您可以做任何您想做的事情。您可以应用补丁、导入到您维护自己的分支的存储库等等。
标签: inheritance makefile prerequisites