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:*「コマンドは最初のターゲットの前に開始します」エラー

どうしたの?

4

2 に答える 2

8

コマンドではないすべての行から、makefileの先頭のタブを削除します。

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

これはあなたには当てはまりませんでしたが、別の理由で同じエラーメッセージが表示されました。ですから、私はここでも答えています。これは、将来、エラーメッセージが表示されたときに役立つようにするためですが、理由はあなたの場合ほど明確ではありません。

これは、名前に等号が含まれるファイルを$(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ファイル自体(バージョン管理による)が変更されていないときにこのエラーメッセージが表示されたとき、私は困惑しました。それが私に夜明けするまで、その時問題のいくつかの状況的な理由があるに違いありません。将来の人が答えを探すのに役立ちますように。

于 2013-03-05T04:46:04.377 に答える