使“命令在第一个目标之前开始”错误



我是linux驱动程序开发的新手。

我正在写你好世界司机。

这是代码:

#define MODULE
#define __KERNEL__
#include <module.h>
int init_module() 
{
 return 0;
}
void cleanup_module()
{
 return;
}

这是制作文件:

    CC=gcc
    MODFLAGS:= -O3 -Wall -DLINUX
    module.o: module.c
    $(CC) $(MODFLAGS) -c module.c

但是当我运行 make 命令时,我有以下内容:makefile:3: * ">命令在第一个目标之前开始"错误

怎么了?

从不是命令的每一行中删除生成文件中的前导选项卡:

CC=gcc
MODFLAGS:= -O3 -Wall -DLINUX
module.o: module.c
    $(CC) $(MODFLAGS) -c module.c

虽然情况并非如此,但我遇到了相同的错误消息,原因不同。所以我也在这里回答,以便将来遇到错误消息时可以帮助人们,但原因并不像您的情况那么明显。

这是一个最小的示例,只需让名称中带有等号的文件与$(wildcard)匹配,即可引发错误条件(显然,出于演示目的,我将文件名与=匹配(。严格来说,使用什么方法来检索$(FILES)变量的名称并不重要。

FILES := $(wildcard ./*=*)
.PHONY: all
define foo
all: something-$(1)
something-$(1): $(1)
    cat $$^ > $$@
endef
$(foreach goal,$(sort $(FILES)),$(eval $(call foo,$(goal))))

问题似乎出在扩展发生的方式上 - 在这种情况下,它只会由于宏而发生。

无论如何,当我最终收到此错误消息时,我感到困惑,而 make 文件本身 - 也根据版本控制 - 没有改变。直到我意识到这个问题一定有一些间接原因。愿它能帮助未来的人寻找答案。

最新更新