关于GNU使用二次扩展使内置函数替换的问题

问题描述 投票:0回答:1

我对带有辅助扩展功能的GNU make有一些疑问。

这是我的项目结构(仅作为示例)

.
├── build
├── Makefile
└── src
    └── a.c

这是启用二级扩展的我的Makefile

.SECONDEXPANSION:

%.o: $$(subst build,src,%.c)
        @echo $^

我输入make build/a.o,GNU抱怨:

make: *** No rule to make target `build/a.o'.  Stop.

看起来像make找不到先决条件,所以它停止了。

为了进行进一步的调试,我在a.c目录中添加了build并重新键入make build/a.o,GNU make输出这些

build/a.c

输出很奇怪,因为我希望输出是src/a.c而不是build/a.c

似乎内置文本功能subst不适用于辅助扩展。

有人知道我的Makefile有什么问题吗?

谢谢

makefile gnu-make
1个回答
0
投票

这是您要实现的目标吗?

build/%.o: src/%.c
    @echo $^

观察:

$ make build/a.o
src/a.c

第二扩展与模式规则和目录中的文件结合在一起是一件难事。我还没有完全理解为什么您的构造无法正常工作。只是它不起作用。当我完全理解时,将更新帖子。

有关更多信息:

© www.soinside.com 2019 - 2024. All rights reserved.