在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++就可以。