我对带有辅助扩展功能的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有什么问题吗?
谢谢
这是您要实现的目标吗?
build/%.o: src/%.c
@echo $^
观察:
$ make build/a.o
src/a.c
第二扩展与模式规则和目录中的文件结合在一起是一件难事。我还没有完全理解为什么您的构造无法正常工作。只是它不起作用。当我完全理解时,将更新帖子。
有关更多信息: