Makefile异常-Makefile:5: *** missing separator. Stop.

文章描述了在Makefile中遇到的一个问题,即使用`$(shellpwd)`获取当前目录时,由于文件编码格式不是纯utf-8导致变量未正确赋值。当将第一行留空或修改编码格式后,问题得到解决。这表明问题可能隐藏在Makefile的编码格式而非代码本身。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Makefile中写下如下逻辑:         

DEMO_ROOT_DIR=$(shell pwd)

USER_ADAPT_DIR=$(DEMO_ROOT_DIR)/adapt

COMPILE_SERVER_OS_BITS=$(shell uname -m)

all :

    @echo $(DEMO_ROOT_DIR)

保存后,在对应环境下运行 make all

        结果输出为空,而正确输出应该为当前Makefile文件所在的路径,也就是说第一句指令没有执行,变量赋值操作是没有执行的

 如果将 上述逻辑修改为

DEMO_ROOT_DIR1=$(shell pwd)

DEMO_ROOT_DIR=$(shell pwd)

USER_ADAPT_DIR=$(DEMO_ROOT_DIR)/adapt

COMPILE_SERVER_OS_BITS=$(shell uname -m)

all :

    @echo $(DEMO_ROOT_DIR)

 再次运行就能出现正常的结果,这个时候如果将DEMO_ROOT_DIR1=$(shell pwd) 所在位置也就是第一行变成空行再运行make all 就会提示Makefile:1: *** missing separator. Stop.

        Makefile:1: *** missing separator. Stop.表示makefile中的命令前没有使用TAB,但是你会发现自己的文件格式都是正确的,仿佛问题一直出现在第一行,这个时候有可能不是你的问题了,或者你编程逻辑的问题,你可以去看看自己文件保存的编码格式是否为utf-8,如果不是的话(哪怕是utf-8 with BOM )请改成utf-8.然后在运行make all,你会发现第一行就没问题了。

        这个问题产生的原因不是一行的格式出现问题,而是Makefile的整个文件的编码格式有问题,但是这时编译器又不会提示,所以很难发现,你会以为是自己写的有问题。关于把文件由一种格式修改为另外一种的方法可以去网上百度一下,向Makefile这种文本文件,方法有很多,比如用个nodepad++就可以。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值