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

时间:2012-05-14 17:56:04

标签: makefile

我是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: * “命令在第一个目标之前开始”错误

怎么了?

2 个答案:

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