5

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

我正在写 helloworld 驱动程序。

这是代码:

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

void cleanup_module()
{
 return;
}

这是makefile:

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

但是当我运行 make 命令时,我有以下内容: makefile:3: * “commands started before first target” 错误

怎么了?

4

2 回答 2

8

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

CC=gcc
MODFLAGS:= -O3 -Wall -DLINUX
module.o: module.c
    $(CC) $(MODFLAGS) -c module.c
于 2012-05-14T18:27:04.043 回答
2

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

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

FILES := $(wildcard ./*=*)

.PHONY: all

define foo
all: something-$(1)
something-$(1): $(1)
    cat $$^ > $$@
endef

$(foreach goal,$(sort $(FILES)),$(eval $(call foo,$(goal))))

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

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

于 2013-03-05T04:46:04.377 回答