entiendo el significado de¿Cuál es el significado de obj-y + = something/in linux kernel Makefile?
obj-$(CONFIG_USB) += usb.o
si CONFIG_USB es y luego usb.o se compilará. Así que ahora la manera de entender esta
obj-y += something/
entiendo el significado de¿Cuál es el significado de obj-y + = something/in linux kernel Makefile?
obj-$(CONFIG_USB) += usb.o
si CONFIG_USB es y luego usb.o se compilará. Así que ahora la manera de entender esta
obj-y += something/
Kernel Makefiles son parte del sistema kbuild
, documentado en varios lugares en la web, por ejemplo http://lwn.net/Articles/21835/. El extracto relevante está aquí:
--- 3.1 Goal definitions
las definiciones de objetivos son la parte principal (corazón) de la kbuild Makefile. Estas líneas definen los archivos que se construirán, cualquier compilación especial opciones y cualquier subdirectorio que se ingrese recursivamente.
el más simple makefile kbuild contiene una línea:
Ejemplo: obj-y + = foo.o
Este diga kbuild que hay un objeto en que directorio llamado foo.o. foo.o se compilará desde foo.c o foo.S.
Si foo.o se construirá como un módulo, se utiliza la variable obj-m. Por lo tanto el siguiente patrón se utiliza a menudo:
Ejemplo: obj - $ (CONFIG_FOO) + = foo.o
$ (CONFIG_FOO) evalúa a cualquiera de los Y (para incorporado) o m (por módulo) . Si CONFIG_FOO no es ni ni m, entonces el archivo no se compilará ni se vinculará.
Así m
significa módulo, y
medios incorporados (siglas de sí en el proceso de configuración del núcleo), y $ (CONFIG_FOO) tira de la respuesta correcta del proceso de configuración normal.
Su pregunta parece ser la razón se añade un directorio completo como meta, la parte correspondiente de la documentación KConfig es:
--- 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'.
obj-y + = algo/
Esto significa que kbuild debería ir al directorio "algo". Una vez que se mueve a este directorio, mira el Makefile en "algo" para decidir qué objetos se deben construir.
Es análogo a diciendo- vaya al directorio "algo" y ejecutar "make"
por cierto, después de añadir todos los archivos .o en la variable obj-y, cuando lo hace realidad compilarlas? Me refiero a dónde en uno de muchos Makefiles en el árbol kernel? –