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

时间:2016-01-27 14:04:18

标签: makefile gnu-make

在我的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,但希望我的makefile对其他/旧版本有效。

1 个答案:

答案 0 :(得分:2)

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

patsubst在这里工作得很好,为什么你需要使用替换参考?