在我的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
在这里工作正常,那么为什么需要使用替换引用呢?