Makefile多行变量定义末行反斜杠的副作用问询
Makefile多行变量定义末尾加反斜杠的副作用分析
针对你提到的场景:在Makefile多行变量定义的最后一行末尾添加反斜杠(且反斜杠后无任何空白字符,直接换行),会带来以下明确的副作用:
1. 直接触发语法解析错误
Makefile中,行尾的反斜杠是续行标记,作用是告诉解析器“当前变量定义未结束,下一行是内容的延续”。如果最后一行加了反斜杠但后续没有任何内容(比如文件到此结束),Make会判定变量定义不完整,抛出类似unterminated variable assignment的语法错误,直接导致整个Makefile无法执行。
2. 若后续存在空白行的隐性问题
如果反斜杠后还有一行或多行空白行,Make会将空白行的空内容拼接到变量值末尾,导致变量值最后多出一个或多个空格。比如:
DUP_TXT_DEFS := $(WORK)/docs/a.txt \ $(wildcard $(WORK)/docs/*_b[0-9].txt) \ $(wildcard $(WORK)/docs/d_*[0-1]_question.txt) \
这种情况下,变量DUP_TXT_DEFS的末尾会带有一个空格。当你用这个变量执行命令(比如cat $(DUP_TXT_DEFS))时,空格会被解析为一个空的文件名参数,触发cat: : No such file or directory这类错误。
现有代码的正确性说明
你提供的原始代码是完全正确的写法:
DUP_TXT_DEFS := $(WORK)/docs/a.txt $(wildcard $(WORK)/docs/*_b[0-9].txt) $(wildcard $(WORK)/docs/*_c[0-9].txt) $(wildcard $(WORK)/docs/d_*[0-1]_question.txt)
每行的内容会被Make自动拼接,行首的缩进空白会被保留在变量值中(如果不需要缩进空白,可以将后续行顶格写),所有通配符展开的文件路径会以空格分隔,不会有任何语法问题或隐性错误。
内容的提问来源于stack exchange,提问作者Tom Ma
相关产品推荐
相关产品推荐

