makefile - 如何将目录添加到存储在“$^”变量中的所有文件名
问题描述
我正在尝试使用该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 呢?
解决方案
一种可能性:为所有 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文本函数