Makefile 不需要用引号绑定变量值。
例如,这将被接受:
a := ls -l -a > out.txt
我的问题是:如果我想做这样的事情:
a := ls -l -a > out
b := .txt
c := $(a)$(b)
如果变量 $(a) 的行尾有一个空格,则变量 $(c) 将如下所示:
ls -l -a > out .txt
后面有空格out
!
这可能会导致错误。
有没有办法全局忽略所有 makefile 变量值行尾的空格?
答案1
不,没有办法改变 make 解析变量定义的方式。如果您无法更改变量的定义点,则必须更改它们的使用点。
如果您使用 GNU make 并且变量值内部不应该有明显的空格,您可以使用strip
功能。
c := $(strip $(a))$(strip $(b))
答案2
空格不在行尾——空格位于 .txt 之前。
这工作正常:
a:= ls -l -a >out
b:=.txt
c:=$(a)$(b)
all:
@echo ${c}
您也可以使用所有类型的文本处理函数......但是使事情依赖于“一定数量(或没有)的空白”通常是“不好的”
答案3
之后您还有空间out
。我遇到了同样的问题,删除变量末尾的空格a
。