obj-m := $(MODNAME).o
ccflags-y := $(CCFLAGS)
src_files := $(wildcard $(foreach pat,*.c *.cpp *.s,src/$(pat) src/$(MODNAME)/$(pat)))
$(MODNAME)-objs := $(addsuffix .o, $(basename $(src_files)))
all:
make -C $(KDIR) M=$(shell pwd) modules
clean:
make -C $(KDIR) M=$(shell pwd) clean
私はこのカーネルモジュールをビルドするためのmakeファイルを持っています。しかし、私がそれを実行するたびに、ターゲットの.cを作るルールがないというエラーが表示されます。 .cはソースファイルではありません。 "if [-d src]"チェックを外すと、カーネル構築システムからの再帰呼び出しにsrcが存在しないというエラーが表示されます。私がsrcへの完全なパスを指定すると、それはそれが見つからないという同じ出力を与えます(これは本当に変です)。 src_filesをハードコードすると(コピーして間違って貼り付けなかった場合)動作します。誰が何が起こっているか考えていますか?ツリー外モジュールビルドの問題
これは、問題の多くを解決するために縫い目が、何らかの理由で、私は」依然として問題が発生しています。以下は私のMakefileと出力へのリンクです。ソースファイル内のハードコードが完全に構築される場合はもう一度注意してください。 https://drive.google.com/open?id=0B59DI9U-fFzfWjNIMTZGSkJLZjQ –
ああ、 'src_files_rel'の代入で不正な置換参照の使い方だった:正しい構文' $(var:pattern = replacement) 'ではなく' = 'を使う'、 'をデリミタとして使用します。答えは今修正されました。 – Tsyvarev
ありがとうございました! –