在我的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对其他/旧版本有效。
答案 0 :(得分:2)
这种语法不对。替换引用在第一部分中需要变量名,而make将扩展该变量,并且将对扩展执行替换。您将$(notdir $(OBJS))
作为要替换的东西,并扩展为一组字符串,而不是变量名称。
patsubst
在这里工作得很好,为什么你需要使用替换参考?