makefile - 显式地创建一个具有变量名的目标

标签 makefile gnu-make

我有一个 Makefile,格式如下:

.PHONY: all

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

all: $(target2)

$(target1): prerequisite1
    recipe

$(target2): $(target1)
    recipe 

target2 依赖于target1make 将正确替换字符串来创建文件名。但是,在我的系统上,输入文件名和路径非常繁琐;我想知道有没有 专门制作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/

相关文章:

emacs - 配置 Emacs FlyMake 以使用 Rakefile 和 Makefile

c - 为什么我的 Makefile 什么都不做?

makefile - 当前Makefile的绝对路径

c - 创建可执行文件时出现 undefined reference 问题

gnu-make - GNU 使 : expansion of a deferred construct

linux - 是否可以有条件地在 makefile 中定义宏?

linux - 中断执行并在终端打印部分信息

c++ - 编译自定义 c++ 包装器 sqlite3

makefile - RocksDB make 安装

makefile - 了解 makefile