首页 > 解决方案 > 如何将目录添加到存储在“$^”变量中的所有文件名

问题描述

我正在尝试使用该ar命令从一些.o文件构建一个库,这些.o文件存储在一个变量中,如下所示:

OBJS    := foo.o bar.o baz.o

我有一个构建库的规则,如下所示:

libfoo.a: $(OBJS)
    $(AR) rcs $(LIBDIR)/$@ $^

但是这不起作用,因为所有这些对象文件都存储在单独的 bin 目录中,因此 make 无法找到它们。这样的事情显然行不通:

libfoo.a: $(OBJS)
    $(AR) rcs $(LIBDIR)/$@ $(BINDIR)/$^

那么我怎样才能告诉 make 在不同的目录中查找这些目标文件而不必 cd 呢?

标签: makefile

解决方案


一种可能性:为所有 obj 添加一个目录,然后用新符号覆盖OBJS或替换 of 的用法:OBJS

OBJS := foo.o bar.o baz.o
SUBDIR_OBJS := $(OBJS:%=subdir/%)

show:
    @echo OBJS $(OBJS)
    @echo SUBDIR_OBJS $(SUBDIR_OBJS)

有关替换的更多信息,请参阅 gnu文本函数


推荐阅读