makefile - 我可以使用什么来获取特定于模式的宏的值
问题描述
我希望特定于模式的宏的值基于模式的主干。
$(BINDIR)/%.gz: LOGFILE := %.dir/%.log
这样的事情可能吗?
解决方案
不,您不能:该模式%
仅适用于规则匹配。基于的建议解决方案$*
也不适用于所有情况。
以下看起来不太好,但可以实现您想要的:
- 使用惰性评估 (
=
) 将内容评估推迟到配方执行之前 - 用于
$(notdir $@)
提取目标的文件名部分 - 用于
$(basename ...)
剥离文件结尾
BINDIR := bin
.PHONY: all
all: $(BINDIR)/test1.gz $(BINDIR)/test2.gz
$(BINDIR)/%.gz: LOGFILE = $(basename $(notdir $@)).dir/$(basename $(notdir $@)).log
$(BINDIR)/test2.gz:
@echo "logfile for $@ is $(LOGFILE)"
$(BINDIR)/%.gz:
@echo "logfile for $@ is $(LOGFILE)"
测试运行:
$ make
logfile for bin/test1.gz is test1.dir/test1.log
logfile for bin/test2.gz is test2.dir/test2.log
推荐阅读
- python - 如何在 AWS EC2 中的 Ubuntu 上运行 Django 项目?
- java - Files#write 不适用于 byte[] 和 charset
- typescript - 如何从请求中返回用户对象
- gpu - A: 在 IMX6 上使用 vivante GPU 和 4.14 内核
- mongodb - 具有多个分组依据的MongoDB聚合
- python-3.x - i am getting AttributeError: 'NoneType' object has no attribute 'find_all'
- node.js - 如何根据聚合结果进行计算?
- javascript - add image in javascript
- c# - How do I make my bomb destroy all enemies in a certain radius?
- json - how to compress JSON data in vertx