Makefile使用undefine指令报missing separator错误如何解决?
错误原因
这个报错的核心原因是 GNU Make 3.81 版本并未将 undefine 识别为合法的顶级独立指令,你对3.81版本手册的核对存在偏差。
- GNU Make 对
undefine顶级指令的正式支持是从 3.82 版本才新增的特性。3.81 版本中虽然存在undefine相关的逻辑,但仅能配合override关键字搭配使用,不支持直接作为顶级语句单独书写。 - 当你在 3.81 版本中直接写
undefine foo时,make 无法识别这是变量操作指令,会将其解析为「要生成名为undefine的目标、foo为该目标的依赖」的规则声明。按照 Makefile 语法规则,规则对应的命令行必须以 Tab 缩进开头,你下一行的undefine bar没有 Tab 缩进,因此触发missing separator报错。
解决方法
如果需要在当前 3.81 版本中实现取消变量定义的效果,有两种可选方案:
- 升级 GNU Make 到 3.82 及以上版本,你原本的代码可直接正常运行
- 保持 3.81 版本的话,给所有
undefine语句加上override前缀,修改后代码如下:
foo := foo bar = bar override undefine foo override undefine bar
内容的提问来源于stack exchange,提问作者user13605801
相关产品推荐
相关产品推荐

