我是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 文件本身 - 也根据版本控制 - 没有改变。直到我意识到这个问题一定有一些间接原因。愿它能帮助未来的人寻找答案。