我有Makefile以下格式:
.PHONY: all
target1 := file1
target2 := $(target1).txt
all: $(target2)
$(target1): prerequisite1
recipe
$(target2): $(target1)
recipe
Run Code Online (Sandbox Code Playgroud)
target2取决于target1,make并将正确替换字符串以创建文件名。但是,在我的系统上,输入文件名和路径非常繁琐;我想知道是否有任何方法可以target1在引用其名称而不是文件路径,而是变量.
例如,我希望能够调用:
$ make $(target1)
Run Code Online (Sandbox Code Playgroud)
而不是
$ make path/to/file1
Run Code Online (Sandbox Code Playgroud)
我想这样做是因为我对变量进行了相当多的更改,并且我的结构Makefile有许多中间体,这些中间体有时很难追溯到它们的文字文件路径,但make根据我分配给它们的变量名很容易找到。
以上不起作用,我已经阅读了该man页面,并在此处和 Google 上进行了大量搜索。只是想知道是否有人以前遇到过这个问题并找到了解决方案。
由于递归的使用,这有点笨拙,但它可以满足您的需求:
target1 := file1
$(target1):
@echo "Hello from $@"
variable-%:
$(MAKE) $($*)
Run Code Online (Sandbox Code Playgroud)
给
$ make variable-target1
make file1
Hello from file1
Run Code Online (Sandbox Code Playgroud)