make时的低级错误: missing separator stop

本文介绍了一个简单的Makefile示例,展示了如何使用wildcard、notdir及patsubst等函数来处理源文件路径,生成对应的对象文件列表,并通过echo命令展示这些变量的内容。

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

src=$(wildcard *.c ./sub/*.c)
dir=$(notdir $(src))
obj=$(patsubst %.c,%.o,$(dir))
all:
        @echo $(src)
        @echo $(dir)
        @echo $(obj)
        @echo "end"@echo 前加上“tab”控制符后就不再报下面的错误了makefile:4: *** missing separator. Stop
<think>这个错误通常发生在Makefile中,当使用空格代替制表符(Tab)来缩进规则中的命令。在Makefile中,规则的命令部分必须以制表符(Tab)开头,而不是空格。如果你在命令前使用了空格,就会导致"missing separator"错误。 解决方法是:确保在规则下的命令前使用制表符(Tab)而不是空格。 例如,错误Makefile可能如下: ``` target: command1 # 这里使用空格缩进 command2 ``` 正确的Makefile应该是: ``` target: command1 # 这里使用制表符(Tab)缩进 command2 ``` 注意:在文本编辑器中,制表符和空格看起来可能很相似,但它们是不同的。 如果你使用的是文本编辑器,请检查是否将制表符设置为了空格,如果是,请改为使用制表符,或者配置编辑器在Makefile中使用制表符。 另外,如果你复制了Makefile内容,也可能不小心将制表符转换成了空格。 请检查Makefile的第7行(根据错误信息:makefile:7),确保命令前是制表符。 下面是一个简单的Makefile示例,其中使用了制表符: ``` # 这是一个注释 CC = gcc CFLAGS = -Wall all: myprogram myprogram: main.o utils.o $(CC) $(CFLAGS) -o myprogram main.o utils.o # 这一行前面是制表符 main.o: main.c $(CC) $(CFLAGS) -c main.c # 制表符 utils.o: utils.c $(CC) $(CFLAGS) -c utils.c # 制表符 clean: rm -f *.o myprogram # 制表符 ``` 如果你在编写Makefile遇到困难,可以使用`cat -t -v Makefile`(在Unix系统上)来查看制表符(显示为^I)和行尾符号。 另外,一些编辑器(如vim)可以用`:set list`来显示不可见字符,这样制表符会显示为`^I`,而空格则是点(取决于配置)。 因此,请检查你的Makefile第7行,确保命令前是制表符而不是空格。</think>这个错误表明你的 Makefile 文件第 7 行缺少了必要的分隔符(通常是制表符)。在 Makefile 中,**命令部分必须以制表符(Tab)开头**,而不是空格。这是 Makefile 语法的一个严格要求。 ### 常见原因和解决方案: 1. **使用空格代替制表符** ```makefile target: command # 错误:使用了4个空格而不是制表符 ``` **修复**:将命令前的空格替换为制表符(Tab键) 2. **编辑器自动转换** - 某些编辑器(如VSCode、Sublime)默认将Tab转换为空格 - **解决方案**:在编辑器设置中禁用"Convert Tabs to Spaces"或设置文件类型为Makefile 3. **复制粘贴问题** - 从网页或文档复制可能丢失制表符 - **修复**:手动输入制表符或使用`cat > Makefile`命令创建 ### 正确示例: ```makefile # 注释使用#号 CC = gcc # 变量定义 CFLAGS = -Wall -g # 目标: 依赖 all: main # 命令必须用TAB开头 main: main.c $(CC) $(CFLAGS) -o main main.c # 注意行首是制表符 clean: rm -f main *.o ``` ### 验证方法: 1. 使用`cat -t Makefile`显示制表符(显示为`^I`) ``` $ cat -t Makefile main: main.c ^I$(CC) $(CFLAGS) -o main main.c ``` 2. 使用文本编辑器的显示隐藏字符功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值