【zz】Makefile:12: missing separator. Stop.

本文详细解析了Makefile中常见的错误之一:缺少分隔符的问题。强调了在Makefile文件中使用制表符而非空格的重要性,并提供了一个具体的示例来说明如何正确地设置命令前缀。

Makefile:12: missing separator. Stop.

Makefile:12: missing separator. Stop.
Makefile:15: missing separator. Stop.
切记: Makefile每个命令的第一个字符必须是制表符[tab],不要想当然的随便认为只是个空格。
 
CC =arm-elf-gcc
LD =arm-elf-ld
EXEC =serialsend
OBJS =serialsend.o
CFLAGS +=
LDFLAGS +=-Wl,elf2flt
all: $(EXEC)
$(EXEC): $(OBJS)
[tab]$(CC) $(LDFLAGS) –o $@ $(OBJS) $(LDLIBS$(LDLIBS_$@))
clean:
[tab]-rm –f $(EXEC) *.elf *.gdb *.o
$(OBJS):

Makefile 中出现 `*** missing separator. Stop.` 错误通常是因为 Makefile 的语法格式不正确。GNU Make 工具要求所有的命令行(以 Tab 字符开头)和声明(如变量赋值或规则定义)之间必须使用正确的分隔符。 以下是常见的修复方法: ### 1. 检查缩进是否使用了 Tab 而非空格 Makefile 中的命令部分必须以 **Tab** 字符开头,而不是空格。如果误用了空格,则会导致此错误。例如: ```makefile target: echo "Hello World" # 正确:使用 Tab 缩进 ``` 如果写成以下形式则会报错: ```makefile target: echo "Hello World" # 错误:使用空格代替 Tab ``` 确保编辑器配置为使用真正的 Tab,或者设置自动转换 Tab 为指定数量的空格时仍然保留原始 Tab 字符[^1]。 ### 2. 检查 Makefile 第4行附近的语法 根据错误提示 `makefile:4: *** missing separator. Stop.`,问题出现在第 4 行附近。请检查该行是否有如下问题: - 是否在目标规则后缺少冒号 `:` 或者使用了其他符号。 - 是否命令行前没有使用 Tab。 - 是否存在拼写错误或遗漏的关键字。 例如: ```makefile all: program # 规则定义正确 program: main.o utils.o gcc -o program main.o utils.o # 使用 Tab 缩进 ``` 如果某一行看起来没有问题但依然报错,可以尝试使用 `cat -A` 命令查看隐藏字符,确认是否存在非法空白字符或混合使用空格与 Tab: ```bash cat -A Makefile ``` ### 3. 检查是否引入了新的配置文件导致冲突 如果你正在使用一个更新后的 Makefile 配置文件(如 `libraries/Makefile.config.new`),请确认是否已经将其重命名为 `libraries/Makefile.config` 并确保其内容与当前项目兼容[^2]。例如: ```bash mv libraries/Makefile.config.new libraries/Makefile.config ``` ### 4. 检查宏定义与平台相关代码 某些 Makefile 可能包含条件编译指令,尤其是在涉及不同架构(如 aarch64、x86_64)时。例如: ```c #ifndef _STAT_VER #if defined (__aarch64__) #define _STAT_VER 0 #elif defined (__x86_64__) #define _STAT_VER 1 #else #define _STAT_VER 3 #endif #endif ``` 如果这些宏定义被错误地修改或未适配当前系统环境,也可能间接影响 Makefile 的执行逻辑,尤其是在跨平台构建时[^3]。 ### 5. 示例修复过程 假设你的 Makefile 内容如下(有错误): ```makefile all: clean build clean: rm -f *.o program build: gcc -o program main.c ``` 上述 `clean` 和 `build` 规则中的命令行都使用了空格缩进,应改为 Tab: ```makefile all: clean build clean: rm -f *.o program build: gcc -o program main.c ``` 保存后重新运行 `make` 命令即可。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等风来不如迎风去

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值