首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用GNU Make将多行变量输出到文件中

使用GNU Make将多行变量输出到文件中
EN

Stack Overflow用户
提问于 2011-09-02 17:13:43
回答 2查看 11.8K关注 0票数 27

我很难编写一个makefile规则,在文件中输出一个多行变量。

下面是我的代码:

代码语言:javascript
复制
define VAR1
    /dev d 755 - - - - -
endef

define VAR2
    /test d 777 - - - - -
    /test2 d 777 - - - - -
endef

VARS += $(VAR1)
VARS += $(VAR2)

all:
    echo "$(VARS)" > test

但是,由于我不知道的原因,回声无法告知“未终止的带引号的字符串”。我怎么才能把文件中声明的每一行都放在单独的一行上呢?

EN

回答 2

Stack Overflow用户

发布于 2014-10-19 01:13:12

GNU make 4.0增加了the ability to write files directly

代码语言:javascript
复制
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 ...)结构中的逗号后面放一个空格,否则输出中会有一个前导空格!

票数 14
EN

Stack Overflow用户

发布于 2011-09-02 21:29:42

看起来像是得到了"Unterminated quoted string“,因为Make在单独的shell中执行配方的每一行,第一行是:

代码语言:javascript
复制
echo "    /dev d 755 - - - - -

下面是我能想到的最好的解决方案(我承认它不是很好,但你违背了Make的本质)是将VARS传递给一个调用$(info ...)的子Make

Makefile:

代码语言:javascript
复制
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:

代码语言:javascript
复制
$(info $(VARS))

.PHONY:all
all:
        @# do nothing
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7281395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档