显式地创建一个带有变量名的目标

Chr*_*s C 2 makefile gnu-make

我有Makefile以下格式:

.PHONY: all

target1 := file1
target2 := $(target1).txt

all: $(target2)

$(target1): prerequisite1
    recipe

$(target2): $(target1)
    recipe 
Run Code Online (Sandbox Code Playgroud)

target2取决于target1make并将正确替换字符串以创建文件名。但是,在我的系统上,输入文件名和路径非常繁琐;我想知道是否有任何方法可以target1在引用其名称而不是文件路径,而是变量.

例如,我希望能够调用:

$ make $(target1) 
Run Code Online (Sandbox Code Playgroud)

而不是

$ make path/to/file1
Run Code Online (Sandbox Code Playgroud)

我想这样做是因为我对变量进行了相当多的更改,并且我的结构Makefile有许多中间体,这些中间体有时很难追溯到它们的文字文件路径,但make根据我分配给它们的变量名很容易找到。

以上不起作用,我已经阅读了该man页面,并在此处和 Google 上进行了大量搜索。只是想知道是否有人以前遇到过这个问题并找到了解决方案。

use*_*968 5

由于递归的使用,这有点笨拙,但它可以满足您的需求:

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)

  • 虽然这有效,但如果存在名为“variable-target1”的“实际”文件,“make”会感到困惑。因此我不会推荐这种“棘手”的解决方案。 (2认同)