我希望有文件,当我可以列出名称(行中的一个)时,这样当调用make时,会立即从这些名称生成规则并附加一些字符串。
示例:
文件内容:
target1
target2
target3
要连接的字符串:my_task _
由此我希望有3条规则:
my_task_target1:
<some things to do>
my_task_target2:
<some things to do>
my_task_target3:
<some things to do>
我知道,当我拥有包含所有这些目标名称的数组时,我可以像this回答一样执行此操作,但我需要从文件中读取数据。
我希望它是这样的,因为我将拥有许多目标,并且每个目标都有不同的任务列表。每个任务都有自己的文件和目标列表。最后,我还将创建在目标之后使用名称但没有前缀的规则,并且此规则将包含分配给某个目标的所有任务,以便我可以调用单独的任务,以及使用一个make调用目标所需的所有任务命令。
我怎样才能做到这一点?或者也许有更好的方法来做我想做的事情?
答案 0 :(得分:3)
以下Makefile动态创建从文件list
读取的目标:
# the file with the targets
targets-file := list
# the string to concatenate
prefix := my_tasks_
# read the targets from the file indicated by the variable targets-file
targets != cat "$(targets-file)"
# concatenate the string to each target
targets := $(addprefix $(prefix),$(targets))
.PHONY: all
all: $(targets)
# function for creating a target
define create_target
$(eval $1:; @echo "some things to do for $$@")
endef
# create the targets
$(foreach target,$(targets),$(call create_target,$(target)))
考虑到文件list
的内容是:
target1
target2
target3
通过上面的Makefile运行make
:
$ make
some things to do for my_tasks_target1
some things to do for my_tasks_target2
some things to do for my_tasks_target3