制作一个目标列表,每个目标都有不同的依赖关系
Make a list of targets that each have different dependencies
我如何编写一个 Makefile 来制作一个 .so 目标列表,每个目标都有不同的 .o 依赖关系,而无需单独写出每个 .so 规则?
我现在基本上写的是每条规则都单独写出来:
BUILD_SO=$(CC) -shared $(CPPFLAGS) -o $@ $? $(LDLIBS)
liba.so: foo.o bar.o epicfoo.o
$(BUILD_SO)
libb.so: foo.o epicbar.o
$(BUILD_SO)
libc.so: foobar.o
$(BUILD_SO)
我希望能够在文件顶部定义变量,例如:
LIBA = liba.so
LIBA_DEPENDS = foo.o bar.o epicfoo.o
LIBB = libb.so
LIBB_DEPENDS = foo.o epicbar.o
LIBC = libc.so
LIBC_DEPENDS = foobar.o
ALL_LIBS = $(LIBA) $(LIBB) $(LIBC)
并且以某种方式 运行 它们全部通过构建目标的通用规则类似于 %.o:%.c
模式规则,但更像
%.so: <some list of .o names>
然后有一个名为 libs 的 .PHONY 规则,这样我就可以调用:
make libs
并构建所有库。
你可以试试这个:
libadeps = foo.o bar.o
libbdeps = bar.o bar2.o
libcdeps = foo2.o foo.o
lib%.so: $(lib%deps)
$(BUILD_SO)
我还没试过(我会的,因为这对我也有帮助),但我认为它会奏效。
我如何编写一个 Makefile 来制作一个 .so 目标列表,每个目标都有不同的 .o 依赖关系,而无需单独写出每个 .so 规则?
我现在基本上写的是每条规则都单独写出来:
BUILD_SO=$(CC) -shared $(CPPFLAGS) -o $@ $? $(LDLIBS)
liba.so: foo.o bar.o epicfoo.o
$(BUILD_SO)
libb.so: foo.o epicbar.o
$(BUILD_SO)
libc.so: foobar.o
$(BUILD_SO)
我希望能够在文件顶部定义变量,例如:
LIBA = liba.so
LIBA_DEPENDS = foo.o bar.o epicfoo.o
LIBB = libb.so
LIBB_DEPENDS = foo.o epicbar.o
LIBC = libc.so
LIBC_DEPENDS = foobar.o
ALL_LIBS = $(LIBA) $(LIBB) $(LIBC)
并且以某种方式 运行 它们全部通过构建目标的通用规则类似于 %.o:%.c
模式规则,但更像
%.so: <some list of .o names>
然后有一个名为 libs 的 .PHONY 规则,这样我就可以调用:
make libs
并构建所有库。
你可以试试这个:
libadeps = foo.o bar.o
libbdeps = bar.o bar2.o
libcdeps = foo2.o foo.o
lib%.so: $(lib%deps)
$(BUILD_SO)
我还没试过(我会的,因为这对我也有帮助),但我认为它会奏效。