Makefile 之谜:pathsubst 的这种特殊用法有什么问题?

发布于 2024-11-01 20:12:35 字数 803 浏览 0 评论 0原文

我的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不再让梦枯萎 2024-11-08 20:12:35

大概您需要 patsubst,而不是 pathsubst

Presumably you want patsubst, not pathsubst.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文