Makefile 之谜:pathsubst 的这种特殊用法有什么问题?
我的 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) 手册 指出:
另一种类型的替换引用允许您使用 patsubst 函数的全部功能。它具有与上述相同的形式“$(var:a=b)”,只是现在 a 必须包含单个“%”字符。这种情况相当于 '$(patsubst a,b,$(var))'
根据这个解释,我希望两个 @echo
语句产生相同的输出,但它们显然不会产生相同的输出。使用显式 pathsubst
的第一种形式有什么问题?
(我在 OS X 上使用 gnu make 3.81
。)
My makefile contains these snippets (among others):
SRC = src
OBJ = obj
DEPS = $(wildcard $(SRC)/*.cpp)
# ...
all : $(BINARIES)
@echo $(pathsubst $(SRC)/%.cpp,$(OBJ)/%.d,$(DEPS))
@echo $(DEPS:$(SRC)/%.cpp=$(OBJ)/%.d)
When I make all
, only the second @echo
outputs something:
$ make all
obj/sample1.d obj/sample1_U.d
The (gnu make) manual states:
Another type of substitution reference lets you use the full power of the patsubst function. It has the same form ‘$(var:a=b)’ described above, except that now a must contain a single ‘%’ character. This case is equivalent to ‘$(patsubst a,b,$(var))’
From this explanation, I would expect that both @echo
statements produce the same output, which they clearly don't. What is wrong with the first form using the explicit pathsubst
?
(I am using gnu make 3.81
on OS X.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
大概您需要
patsubst
,而不是pathsubst
。Presumably you want
patsubst
, notpathsubst
.