我是linux驱动程序dev的新手。
我正在写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: * “命令在第一个目标之前开始”错误
怎么了?
答案 0 :(得分:9)
从非命令的每一行中删除makefile中的主要标签:
CC=gcc
MODFLAGS:= -O3 -Wall -DLINUX
module.o: module.c
$(CC) $(MODFLAGS) -c module.c
答案 1 :(得分:1)
虽然情况并非如此,但我遇到了同样的错误消息,原因不同。所以我也在这里回答,以便当他们遇到错误信息时可能会帮助将来的人,但原因并不像你的情况那么明显。
这是一个引发错误情况的最小例子,只是让名称中带有等号的文件与$(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文件本身 - 也是根据版本控制 - 没有改变。直到我意识到这个问题必然存在一些间接原因。可以帮助未来的人寻找答案。