Makefile规则中的不同输出

时间:2013-05-20 22:21:38

标签: makefile newline

在以下Makefile

f = echo $(1)

t:
    $(call f,"a \
        b"); \
    $(call f,"a \
        b")
  • 在第4行(第一个调用f)
  • 的开头只有一个TAB
  • 行尾没有空白

输出

a b
a  b

两个调用是相同的(初始TAB除外)。为什么输出不同?

1 个答案:

答案 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;

我不知道此代码,但inref指针以锁步方式运行,因此将outref进行比较似乎是错误的。将out > ref替换为out > cmds->command_lines[i]会更正您的问题,并且可能不会对代码进行完全错误的更改。

这是否是一个GNU Make错误,你的makefile如此密切地依赖于删除空白的变幻莫测的事实并不是一个好主意。如果你的食谱中的空白真的很重要,你可以将其作为防御性编码

f = echo $(strip $(1))

并避免一下子出现任何问题。