我的makefile包含这些片段(以及其他):
SRC = src
OBJ = obj
DEPS = $(wildcard $(SRC)/*.cpp)
# ...
all : $(BINARIES)
@echo $(pathsubst $(SRC)/%.cpp,$(OBJ)/%.d,$(DEPS))
@echo $(DEPS:$(SRC)/%.cpp=$(OBJ)/%.d)
当我make all
时,只有第二个@echo
输出内容:
$ make all
obj/sample1.d obj/sample1_U.d
(gnu make)manual陈述:
另一种类型的替换参考允许您使用patsubst函数的全部功能。它具有与上述'$(var:a = b)'相同的形式,但现在必须包含单个'%'字符。这种情况相当于'$(patsubst a,b,$(var))'
从这个解释中,我希望两个@echo
语句产生相同的输出,但它们显然不会。使用显式pathsubst
的第一个表单有什么问题?
(我在OS X上使用gnu make 3.81
。)
答案 0 :(得分:5)
大概你想要patsubst
,而不是pathsubst
。