从 $(shell...) 定义多个 GNU Makefile 变量

问题描述 投票:0回答:1

我有一个文件(例如

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
前缀只是一个示例。

makefile gnu-make
1个回答
0
投票

一种易于理解的解决方案是使用 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|' $< > $@
© www.soinside.com 2019 - 2024. All rights reserved.