【问题标题】:Linux compliation Make error: missing separatorLinux 编译出错:缺少分隔符
【发布时间】:2019-05-07 02:42:57
【问题描述】:

我正在尝试使用以下 Makefile 编译我的程序 thread.c

ifneq ($(KERNELRELEASE),)
obj-m := thread.o
else

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

default:
       $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

当我运行make 时出现错误

Makefile:10: *** 缺少分隔符。停下来。

我没有找到这个问题的原因,有人可以帮我解决这个问题吗?

【问题讨论】:

  • 它通常与空格有关。尝试在obj-m := thread.o$(MAKE) -C $(KERNELDIR) M=$(PWD) modules 之前添加一些

标签: c linux makefile pthreads


【解决方案1】:

我相信我以前也遇到过这个问题,尤其是在使用 windriver 时。通常我只是纳米它抱怨的特定文件,删除行中的第一个空格然后将其添加回来。这是一个奇怪的修复,但通常对我有用。

【讨论】:

    【解决方案2】:

    规则配方中的每个命令都必须以制表符开头。后面可能会出现更多或其他空格,但前导标签是必不可少的。

    您的文件包含目标 default 的规则,但其配方中的单个命令不以制表符(或任何空格,就此而言)开头。原来那是第 10 行(假设您已经提交了整个文件),这确实是 make 的诊断所暗示的行号。只需插入标签。就个人而言,我还会在endif 之前添加一个空行,但这是一种风格推荐,而不是要求。也就是说:

    ifneq ($(KERNELRELEASE),)
    
    obj-m := thread.o
    
    else
    
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    PWD := $(shell pwd)
    
    default:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
    
    endif
    

    【讨论】:

    • 谢谢! ,我在第一行和默认值下添加了一个“选项卡”,它正在工作。
    猜你喜欢
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多