我有一个文件(例如
iostruct.def
),其中包含一些变量定义:
VARIABLE_A=/some/path
VARIABLE_B=/another/path
...
我想从 GNU Makefile 中读取此文件,在所有路径前添加一些字符串(例如
/tmp
)并将它们用作普通 Make 变量。
这是我对此的(失败的)尝试:
vars := $(shell sed -r "s|=(\/.*)|=/tmp\1|" iostruct.def)
$(eval $(foreach v,$(vars),$(v)))
all:
@echo $(VARIABLE_A)
@echo $(VARIABLE_B)
但是我最终得到
VARIABLE_A="/tmp/some/path VARIABLE_B=/tmp/another/path"
并且 VARIABLE_B
是空的。我做错了什么?
PS。重点是 multiple 的即时定义,使变量来自
$(shell ...)
;值的 tmp
前缀只是一个示例。
一种易于理解的解决方案是使用 shell 命令将
iostruct.def
文件转换为您想要的格式,然后 include
该文件。像这样:
all:
@echo $(VARIABLE_A)
@echo $(VARIABLE_B)
include iostruct.def.mk
iostruct.def.mk: iostruct.def
sed -r 's|=(\/.*)|=/tmp\1|' $< > $@