我很难编写一个makefile规则,在文件中输出一个多行变量。
下面是我的代码:
define VAR1
/dev d 755 - - - - -
endef
define VAR2
/test d 777 - - - - -
/test2 d 777 - - - - -
endef
VARS += $(VAR1)
VARS += $(VAR2)
all:
echo "$(VARS)" > test
但是,由于我不知道的原因,回声无法告知“未终止的带引号的字符串”。我怎么才能把文件中声明的每一行都放在单独的一行上呢?
发布于 2014-10-19 01:13:12
GNU make 4.0增加了the ability to write files directly
define VAR1
/dev d 755 - - - - -
endef
define VAR2
/test d 777 - - - - -
/test2 d 777 - - - - -
endef
define VARS :=
$(VAR1)
$(VAR2)
endef
all:
$(file > test,$(VARS))
注意,您仍然需要使用define
来定义VARS
,否则VAR1
的最后一行和VAR2
的第一行将合并到一行中。另外,不要在$(file ...)
结构中的逗号后面放一个空格,否则输出中会有一个前导空格!
发布于 2011-09-02 21:29:42
看起来像是得到了"Unterminated quoted string“,因为Make在单独的shell中执行配方的每一行,第一行是:
echo " /dev d 755 - - - - -
下面是我能想到的最好的解决方案(我承认它不是很好,但你违背了Make的本质)是将VARS
传递给一个调用$(info ...)
的子Make
Makefile:
define VAR1
/dev d 755 - - - - -
endef
define VAR2
/test d 777 - - - - -
/test2 d 777 - - - - -
endef
define VARS
$(VAR1)
$(VAR2)
endef
export VARS
all:
$(MAKE) -f Makefile.print > test
Makefile.print:
$(info $(VARS))
.PHONY:all
all:
@# do nothing
https://stackoverflow.com/questions/7281395
复制相似问题