如何在Makefile多行变量中加入define开头的字符串且无前置制表符
解决方案
方案1:转义行首define关键字(最推荐)
只需要定义一个空变量,在变量内容里的define前插入这个空变量,就能让Make不将其识别为自身的指令,无需额外添加制表符:
# 定义空变量用于转义 empty := define __FOO__ $(empty)define my-func foo end endef
输出时直接正常调用变量即可,生成的文件不会有多余前缀:
foo: @echo "$$__FOO__" > my-file
方案2:使用shell heredoc直接生成文件
如果不需要复用变量内容,直接在配方中用heredoc生成文件可以完全避开Make的语法冲突:
foo: @cat > my-file << 'EOF' define my-func foo end EOF
注意EOF加单引号可以避免shell解析内容中的特殊字符。
方案3:替换已有前置制表符
如果已经写了带制表符前缀的变量,也可以用subst函数在输出时删除前缀制表符:
define __FOO__ define my-func foo end endef foo: @echo "$(subst $(empty) ,$(empty),$(__FOO__))" > my-file
注意subst参数中的空白是实际的制表符,不是空格。
内容的提问来源于stack exchange,提问作者ardnew
相关产品推荐
相关产品推荐

