25

私はの意味を理解しています

obj-$(CONFIG_USB)       += usb.o

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

obj-y               += something/
4

3 に答える 3

49

カーネルMakefileはkbuildシステムの一部であり、Web上のさまざまな場所(http://lwn.net/Articles/21835/など)に文書化されています。関連する抜粋はここにあります:

--- 3.1 Goal definitions

目標の定義は、kbuild Makefileの主要部分(中心)です。これらの行は、ビルドされるファイル、特別なコンパイルオプション、および再帰的に入力されるサブディレクトリを定義します。

最も単純なkbuildmakefileには、次の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)は通常の構成プロセスから正しい答えを引き出します。

于 2012-06-08T13:46:14.247 に答える
11

obj-y+=何か/

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

これは、「something」ディレクトリに移動して「make」を実行すると言うのと似ています。

于 2013-07-29T22:08:19.450 に答える
7

あなたの質問は、ディレクトリ全体が目標として追加される理由のようです。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'.
于 2013-07-23T10:31:29.840 に答える