makefile常见错误Makefile:7: *** missing separator. Stop.的解决办法

本文介绍了解决Makefile中常见错误的方法,包括语法错误、依赖关系错误、变量引用错误等,并提供了调试技巧,如使用VERBOSE、-d选项和单步调试等。

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

 Makefile:7: *** missing separator.  Stop.       

[解决办法]

makefile里禁止乱用TAB,只有命令所在的行才能且只能以TAB开头

其他的如,make变量的定义、赋值,make内定函数如(error “strings”)都不能以TAB开头,不然make会将其作为命令来处理
如例子,
第八行和第十行必须用tab开头

ifneq ($(KERNELRELEASE),)
    obj-m += module.o
else
    PWD := $(shell pwd)
    KVER := $(shell uname -r)
    KDIR := /lib/modules/$(KVER)/build
all:
        $(MAKE)    -C $(KDIR) M= $(PWD)
clean:
        rm -rf *.o *.mod.c *.ko *.symvers *.order *.makers
endif

[解决办法]
如果排除了TAB用空格代替的问题后、以及由中文“:”等问题后,问题还存在
那么很可能是文件编码格式的问题
查看一下Makefile 文件编码格式是不是utf-8的,还带有BOM标记在文件头

$ xxd -l 16 Makefile
0000000: efbb bf61 6c6c 3a0a 2020 6563 686f 2068  ...all:.

Makefile错误的常见原因

在编写和使用Makefile时,可能会遇到各种错误。下面列举了一些常见的Makefile错误原因:

  1. 语法错误
    Makefile是一种基于规则的脚本语言,错误的语法会导致Makefile无法正确解析。常见的语法错误包括缩进错误、命令行格式错误等。

  2. 依赖关系错误
    Makefile中定义的依赖关系是构建过程的核心,如果依赖关系定义不正确,会导致构建出错或者不更新目标文件。

  3. 变量引用错误
    Makefile中使用变量来管理和传递参数,如果变量引用不正确,可能会导致构建过程出现错误。

  4. 命令执行错误
    Makefile中的命令行用于执行构建任务,如果命令执行失败或者返回非零状态码,会导致构建中止。

  5. 环境配置错误
    Makefile的执行可能受到环境变量的影响,如果环境配置不正确,可能导致构建过程出错。

调试构建问题的方法和技巧

  1. 使用VERBOSE选项
    在调试Makefile时,可以使用VERBOSE选项来输出更详细的构建信息。VERBOSE选项可以通过在命令行中加入-V或者--debug选项来启用。例如:
make -V target
  1. 使用-d选项
    使用make命令的-d选项可以输出Makefile的调试信息,包括Makefile中的变量值、规则匹配和命令执行等。例如:
make -d target
  1. 使用--just-print选项
    使用make命令的–just-print选项可以让Makefile只输出构建过程中要执行的命令,而不实际执行。这样可以帮助我们检查Makefile是否正确地生成了构建命令。例如:
make --just-print target
  1. 使用--dry-run选项
    使用make命令的–dry-run选项可以让Makefile在执行前打印构建过程中要执行的命令,但不会实际执行。这样可以帮助我们预览构建过程中可能出现的问题。例如:
make --dry-run target
  1. 单步调试
    可以通过在Makefile中添加调试信息、打印变量值和中间结果等方法,来实现在构建过程中的单步调试。

  2. 逐步构建
    如果Makefile中包含多个目标和规则,可以通过逐步构建的方式,逐个目标地构建项目,帮助我们定位错误。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yasin墨染锦年

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

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

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

打赏作者

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

抵扣说明:

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

余额充值