我有别人写的包裹;我无法更改该包中的文件。在那个包中有一个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文件中的变量。如果可以,我想避免这样做。
答案 0 :(得分:0)
我有两个想法:
首先,运行类似:
make -n bin/progA LINK.cc='OBJECTS:' | grep ^OBJECTS:
然后捕获输出。你必须从结果中手动删除-o
等。
另一个想法是运行“make -pn”来获取make数据库的副本,并用grep或其他任何东西解析它。
这些与直接通过makefile的优势在于,任何变量等都将通过make扩展。