在以下Makefile
中f = echo $(1)
t:
$(call f,"a \
b"); \
$(call f,"a \
b")
输出
a b
a b
两个调用是相同的(初始TAB除外)。为什么输出不同?
答案 0 :(得分:0)
我怀疑为什么输出不同的答案是,这是GNU Make的反斜杠 - 换行符空格崩溃的一个小错误。相关代码位于new_job()
:
/* Discard any preceding whitespace that has
already been written to the output. */
while (out > ref
&& isblank ((unsigned char)out[-1]))
--out;
我不知道此代码,但in
和ref
指针以锁步方式运行,因此将out
与ref
进行比较似乎是错误的。将out > ref
替换为out > cmds->command_lines[i]
会更正您的问题,并且可能不会对代码进行完全错误的更改。
这是否是一个GNU Make错误,你的makefile如此密切地依赖于删除空白的变幻莫测的事实并不是一个好主意。如果你的食谱中的空白真的很重要,你可以将其作为防御性编码
f = echo $(strip $(1))
并避免一下子出现任何问题。