の意味がわかります
obj-$(CONFIG_USB) += usb.o
cONFIG_USBがyの場合、usb.oがコンパイルされます。だから今これを理解する方法
obj-y += something/
カーネルMakefileはkbuild
システムの一部であり、たとえば http://lwn.net/Articles/21835/ などのWeb上のさまざまな場所に文書化されています。関連する抜粋はここにあります:
--- 3.1 Goal definitions
目標の定義は、kbuild Makefileの主要部分(中心)です。これらの行は、ビルドされるファイル、特別なコンパイルオプション、および再帰的に入力されるサブディレクトリを定義します。
最も単純なkbuild makefileには1行が含まれています。
例:obj-y + = foo.o
これは、そのディレクトリにfoo.oという名前のオブジェクトが1つあることをkbuildに伝えます。 foo.oは、foo.cまたはfoo.Sからビルドされます。
Foo.oをモジュールとしてビルドする場合、変数obj-mが使用されます。したがって、次のパターンがよく使用されます。
例:obj-$(CONFIG_FOO)+ = foo.o
$(CONFIG_FOO)は、y(組み込み)またはm(モジュール)のいずれかに評価されます。 CONFIG_FOOがyでもmでもない場合、ファイルはコンパイルもリンクもされません。
したがって、m
はモジュールを意味し、y
は組み込み(カーネル構成プロセスでyesを意味する)を意味し、$(CONFIG_FOO)は通常の構成プロセスから正しい答えを引き出します。
obj-y + =何か/
つまり、kbuildは「何か」のディレクトリに移動する必要があります。このディレクトリに移動すると、「何か」のMakefileを調べて、構築するオブジェクトを決定します。
これは、「何か」というディレクトリに移動して「make」を実行するのと同じです。
あなたの質問は、なぜディレクトリ全体が目標として追加されるのかと思われます、KConfigドキュメントの関連部分は次のとおりです:
--- 3.6 Descending down in directories
A Makefile is only responsible for building objects in its own
directory. Files in subdirectories should be taken care of by
Makefiles in these subdirs. The build system will automatically
invoke make recursively in subdirectories, provided you let it know of
them.
To do so obj-y and obj-m are used.
ext2 lives in a separate directory, and the Makefile present in fs/
tells kbuild to descend down using the following assignment.
Example:
#fs/Makefile
obj-$(CONfIG_EXT2_FS) += ext2/
If CONFIG_EXT2_FS is set to either 'y' (built-in) or 'm' (modular)
the corresponding obj- variable will be set, and kbuild will descend
down in the ext2 directory.
Kbuild only uses this information to decide that it needs to visit
the directory, it is the Makefile in the subdirectory that
specifies what is modules and what is built-in.
It is good practice to use a CONFIG_ variable when assigning directory
names. This allows kbuild to totally skip the directory if the
corresponding CONFIG_ option is neither 'y' nor 'm'.