You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:27:01