这并不是 GNU Make 特有的东西;而是 GNU Make 特有的。相当,make
is POSIX 定义以这种方式工作:
string1 = [string2]
该宏名为string1被定义为具有以下值string2, where string2被定义为之后的所有字符(如果有)<equals-sign>
,最多一个注释字符(#
)或未转义的<newline>
. Any <blank>
紧接在之前或之后的字符<equals-sign>
应被忽略。
这可以解释为一个功能,允许您清楚地创建带有尾随空格的变量:
FOO = stuff # this macro has two trailing spaces
BAR = something else# and this one has none
尽管通常重新组织您使用的地方可能会更清楚$(FOO)
而不是依赖于它有模糊的空白。
也许处理这个问题的最好方法就是避免它:制定一个约定do not在变量定义行上添加注释(除非偶尔使有意的空白显式化)。而不是这样写:
A = a # list of apples
B = b # list of bananas
C = c # list of carrots
写这个:
# list of apples
A = a
# list of bananas
B = b
# list of carrots
C = c
这往往是 GNU 项目中的风格(例如,参见本页底部),尽管我不记得这是否在任何地方都有记录。
顺便说一句,当检查空格时,您可能想在您的变量中引用变量echo
命令更多:
rule:
@echo 'RESULT="$(RESULT)"'
In your echo RESULT=\"$(RESULT)\"
版本,$(RESULT)
没有从 shell 中引用,因此制表符和多个空格会被误导性地显示为单个空格。