在替换引用中使用notdir,而不是patsubst



在我的makefile中,我正在从对象列表中剥离文件路径,并将该路径替换为构建目录。

使用

patsubst,这似乎工作正常,但是使用替换替换似乎不起作用,例如:

OBJS=/path/to/obj1.o /another/path/obj2.o
BUILD_DIR=build
$(info patsubst = $(patsubst %, $(BUILD_DIR)/%, $(notdir $(OBJS)))) 
$(info substref = $( $(notdir $(OBJS)):%=$(BUILD_DIR)/%) )

其输出为:

patsubst = build/obj1.o build/obj2.o

substref =

这是替换引用的缺点还是我做错了什么?

我使用的是 GNU Make 4.1,但希望我的制作文件对其他/旧版本有效。

这种语法不正确。 替换引用在第一部分需要一个变量名,make 将扩展该变量,替换将在扩展时执行。 您$(notdir $(OBJS))作为要替换的东西,并且扩展到一组字符串,而不是变量名称。

patsubst在这里工作正常,那么为什么需要使用替换引用呢?

最新更新