Makefile执行报错missing separator. Stop.该怎么解决?
Makefile
missing separator. Stop. 报错解决方案 核心原因
- Makefile规则中,目标对应的执行命令必须且仅能以1个制表符(Tab)开头,不允许使用空格,也不允许Tab和空格混合缩进。你当前贴出的Makefile中两条编译命令用了空格缩进,不符合语法要求;此外部分编辑器默认开启「Tab自动转空格」功能,会导致你输入的Tab被自动替换为空格,这也是你调整缩进后依然报错的常见原因。
修正后的Makefile代码
CC = gcc CFLAGS = -I. -g -pthread -w DEPS = main.h OBJ = main.o # 生成.o目标文件的规则 %.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) # 生成main可执行文件的规则 main: $(OBJ) $(CC) -o $@ $^ $(CFLAGS) # 可选规则:生成randomgen可执行文件(适配你目录下带main函数的randomgen.c) randomgen: randomgen.o $(CC) -o $@ $^ $(CFLAGS) # 可选规则:清理所有编译产物 clean: rm -f *.o main randomgen
注:复制上述代码后,请确认$(CC)开头的命令行缩进为单个Tab字符,不要替换为空格。
校验与使用方法
- 编辑完成后执行
cat -A Makefile命令查看文件内容,若命令行开头显示^I字符,说明缩进为正确的Tab;如果显示为普通空格,需要先关闭编辑器的「Tab转空格」配置后重新修改缩进 - 执行
make即可编译出main程序 - 如果需要编译randomgen程序,执行
make randomgen即可 - 执行
make clean可以删除所有编译生成的.o文件和可执行文件
注意事项
- main.c和randomgen.c都包含main函数,属于两个独立程序,不能合并链接到同一个可执行文件中,否则会报main函数重复定义错误
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

