我明白的意思
obj-$(CONFIG_USB) += usb.o
如果CONFIG_USB是y,则usb.o将被编译。 那么现在该如何理解呢
obj-y += something/
内核makefiles是kbuild
系统的一部分,记录在网络上的不同地方,例如http://lwn.net/Articles/21835/ 。 相关摘录如下:
--- 3.1 Goal definitions
目标定义是kbuild Makefile的主要部分(心脏)。 这些行定义要构建的文件,任何特殊的编译选项以及要递归输入的任何子目录。
最简单的kbuild makefile包含一行:
例如: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)从正常的配置过程中拉出正确的答案。
obj-y + =某事/
这意味着kbuild应该进入目录“东西”。 一旦移动到这个目录,它就会查看Makefile中的“something”来决定应该创建哪些对象。
这就类似于说 – 去“目录”目录并执行“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'.