在makefile中,使用\
转义换行允许在多个源行中拆分单行长字符串内容。但是,新线被替换为空格。源中是否存在透明换行符,不会影响字符串内容?
VAR=w\
o\
r\
d
all:
echo $(VAR)
所需的输出为'word',但实际输出为'w o r d'。
答案 0 :(得分:9)
昨天刚刚问到这个问题:How can I break a variable definition across multiple lines in a Makefile without spaces?
简短的回答是否定的,没有办法做到这一点。这个行为是make的POSIX标准所必需的。
您所能做的就是尝试对字符串进行后处理以使用$(subst ...)
或类似内容删除空格。
答案 1 :(得分:4)
最简单的解决方案是使用$\<newline>
拆分
line(至少如果你使用的是GNU Make):
VAR = w$\
o$\
r$\
d
all:
echo $(VAR)
输出为“word”,没有空格。这是因为GNU
Make将用单个替换反斜杠 - 换行符 - 空格
空格,使VAR
的作业相当于:
VAR = w$ o$ r$ d
从
https://www.gnu.org/software/make/manual/html_node/Reference.html#Reference:
“一个美元符号后跟一个美元符号以外的字符,
开括号或开括号将单个字符视为
变量名。“所以$<space>
对是扩展的
名称为单个空格字符的变量。从此
默认情况下未定义变量,它将扩展为空
字符串。
请注意,变量VAR
仍将包含
$<space>
对,直到它被扩展。大多数时候,这个
没关系,但如果你的makefile依赖于使用
$(value VAR)
处理基础(未扩展)值,
上述技术可能会提供令人惊讶的结果。
对于其他想法,请在此处查看我对类似问题的回答: How can I break a variable definition across multiple lines in a Makefile without spaces?
可以在中找到对延续线选项的更长时间处理 我的文章“GNU Make line continuations”: http://drmikehenry.com/gnu-make-line-continuations/