web-dev-qa-db-ja.com

LinuxカーネルMakefileでのobj-y + = something /の意味は何ですか?

の意味がわかります

obj-$(CONFIG_USB)       += usb.o

cONFIG_USBがyの場合、usb.oがコンパイルされます。だから今これを理解する方法

obj-y               += something/
22
Jeegar Patel

カーネル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)は通常の構成プロセスから正しい答えを引き出します。

44
Peter

obj-y + =何か/

つまり、kbuildは「何か」のディレクトリに移動する必要があります。このディレクトリに移動すると、「何か」のMakefileを調べて、構築するオブジェクトを決定します。

これは、「何か」というディレクトリに移動して「make」を実行するのと同じです。

8
Tulip

あなたの質問は、なぜディレクトリ全体が目標として追加されるのかと思われます、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'.
5
Étienne