【问题标题】:Make a list of targets that each have different dependencies列出每个具有不同依赖项的目标
【发布时间】:2015-08-21 17:26:38
【问题描述】:

如何编写一个 Makefile 来列出每个具有不同 .o 依赖项的 .so 目标列表,而无需单独写出每个 .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

并构建所有库。

【问题讨论】:

标签: makefile shared-libraries


【解决方案1】:

你可以试试这个:

libadeps = foo.o bar.o
libbdeps = bar.o bar2.o
libcdeps = foo2.o foo.o

lib%.so: $(lib%deps)
    $(BUILD_SO)

我还没有尝试过(我会尝试,因为这对我也有帮助),但我认为它会起作用。

【讨论】:

  • @majorpain1588:你试过了吗?我还没有时间尝试。我也打算在我的项目中使用它。
  • 我在自己制作的一个小型虚拟项目上进行了尝试,它似乎可以工作。
猜你喜欢
  • 2018-11-15
  • 2012-02-08
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
相关资源
最近更新 更多