Что означает obj-y + = something/in linux kernel Makefile? - программирование
Подтвердить что ты не робот

Что означает obj-y + = something/in linux kernel Makefile?

Я понимаю смысл

obj-$(CONFIG_USB)       += usb.o

если CONFIG_USB - это y, тогда usb.o будет скомпилирован. Итак, как это понимать?

obj-y               += something/
4b9b3361

Ответ 1

Kernel Makefiles являются частью системы kbuild, задокументированной в разных местах в Интернете, например http://lwn.net/Articles/21835/. Соответствующий отрывок находится здесь:

--- 3.1 Goal definitions

Определения целей являются основной частью (сердцем) файла kbuild Makefile.   Эти строки определяют файлы, которые нужно создать, любую специальную компиляцию   параметры и любые подкаталоги, которые будут введены рекурсивно.

Самый простой make файл kbuild содержит одну строку:

Пример: obj-y + = foo.o

Это говорит kbuild, что в этом каталоге есть один объект   foo.o. 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) выдает правильный ответ из обычного процесса конфигурации.

Ответ 2

obj-y + = something/

Это означает, что kbuild должен войти в каталог "что-то" . Как только он переместится в этот каталог, он посмотрит Makefile в "что-то" , чтобы решить, какие объекты должны быть построены.

Это аналогично высказыванию - перейдите в каталог "что-то" и выполните "make"

Ответ 3

Кажется, ваш вопрос заключается в том, что в качестве цели добавляется целая директория, соответствующая часть документации 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'.