11

カーネル モジュール makefile のインクルード パスを追加するにはどうすればよいですか? test_module.c に「test_kernel.h」をインクルードしたい。「test_kernel.h」は別のディレクトリ「inc」にあります。Makefile で次の解決策を試しましたが、機能しません。

obj-m += test_module.o

test_module:
    $(MAKE) -C "$(LINUX_DIR)" -Iinc $(MAKE_OPTS) modules
4

4 に答える 4

19

あなたはあなたので利用する必要がありEXTRA_CFLAGSますMakefile。これらの行で何かを試してください:

obj-m += test_module.o
EXTRA_CFLAGS=-I$(PWD)/inc

test_module:
    $(MAKE) -C "$(LINUX_DIR)" $(MAKE_OPTS) modules

ここのセクション3.7Compilation Flagsセクションを参照してください。 お役に立てれば!

于 2012-04-16T16:23:57.390 に答える
2

ファイルにインクルードを正しく指定しましたか?

例えば:

#include "inc/something.h"

それ以外の

#include <inc/something.h>
于 2012-04-16T15:11:05.813 に答える
1

-IはGCCフラグであり、Makeフラグではありません。1 変数を「サブ」Makeプロセスに渡す必要があります。おそらくこのようなもの:

$(MAKE) -C "$(LINUX_DIR)" CPPFLAGS="-Iinc" $(MAKE_OPTS) modules

ここCPPFLAGSで、は暗黙のルールで使用される標準のMake変数です。代わりに独自の変数を自由に使用し、サブメイクで適切に使用されていることを確認してください。

Makeマニュアルには、Makeインスタンス間の変数の通信に関する詳細が記載されています:http ://www.gnu.org/software/make/manual/make.html#Variables_002fRecursion 。


1.実際には、これはMakeフラグでもありますが、まったく関係のないものです。

于 2012-04-16T14:46:52.267 に答える
0

私にとって、そのうちの1つが成功するまで、多くの試行が失敗しました。$(src)パスで使用するとccflags-y、たとえば次のようになります。

# Include Paths
ccflags-y       += -I$(src)/../../lib/include 

ソースフォルダーから 2 つ上のディレクトリ "/lib/include" の場合。

これは、 Kernel.orgの声明から導き出されたものです。

src ツリーにあるファイルを参照するときは、常に $(src) を使用してください。特に、ソース コードが Linux カーネル ツリーの外部にあるディレクトリにある場合は注意してください。

于 2021-08-23T16:04:53.967 に答える