我有一个 Makefile
,格式如下:
.PHONY: all
target1 := file1
target2 := $(target1).txt
all: $(target2)
$(target1): prerequisite1
recipe
$(target2): $(target1)
recipe
target2
依赖于target1
,make
将正确替换字符串来创建文件名。但是,在我的系统上,输入文件名和路径非常繁琐;我想知道有没有
专门制作target1
的方法,同时引用其名称不是作为文件路径,而是作为变量。
例如,我希望能够调用:
$ make $(target1)
而不是
$ make path/to/file1
我想这样做是因为我对变量进行了相当多的更改,并且我的 Makefile
的结构有许多中间体,这些中间体有时很难追溯到它们的文字文件路径,但很容易 make
基于我分配给它们的变量名称。
以上内容不起作用,我已经阅读了 man
页面,并在此处和 Google 上进行了大量搜索。只是想知道是否有人以前遇到过这个问题并找到了解决方案。
最佳答案
由于使用递归,这有点笨拙,但它可以满足您的需求:
target1 := file1
$(target1):
@echo "Hello from $@"
variable-%:
$(MAKE) $($*)
给予
$ make variable-target1
make file1
Hello from file1
关于makefile - 显式地创建一个具有变量名的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45896721/