GNU make:继承其他规则的先决条件

时间:2013-09-25 16:47:44

标签: inheritance makefile prerequisites

我有别人写的包裹;我无法更改该包中的文件。在那个包中有一个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文件中的变量。如果可以,我想避免这样做。

1 个答案:

答案 0 :(得分:0)

我有两个想法:

首先,运行类似:

make -n bin/progA LINK.cc='OBJECTS:' | grep ^OBJECTS:

然后捕获输出。你必须从结果中手动删除-o等。

另一个想法是运行“make -pn”来获取make数据库的副本,并用grep或其他任何东西解析它。

这些与直接通过makefile的优势在于,任何变量等都将通过make扩展。