makefile 语法_makefile define用法_nis makefile 语法(3)

电脑杂谈  发布时间:2017-04-11 03:08:44  来源:网络整理

例子:

#drivers/isdn/i4l/Makefile

obj-$(CONFIG_ISDN_PPP_BSDCOMP)= isdn_bsdcomp.o

注意:这个例子中$(CONFIG_ISDN_PPP_BSDCOMP)变量的等于’m’。

如果一个内核模块由多个源文件编译而成,你需要像上面例子一样指定需要生成的模块。

Kbuild需要知道你要的模块是从哪些文件编译生成的,所以你必须通过设置$(<module_name>-objs)变量来让Kbuild知道。

例子:

#drivers/isdn/i4l/Makefile

obj-$(CONFIG_ISDN) = isdn.o

isdn-objs := isdn_net_lib.o isdn_v110.oisdn_common.o

在这个例子中,模块的名字是isdn.o。Kbuild将会编译生成$(isdn-objs)变量中列出的目标文件。然后运行"$(LD) -r"命令来链接列表中的文件从而生成isdn.o。

Kbuild通过后缀名-objs和-y来判断一个对象是否是一个复合对象。这允许Makefiles使用CONFIG_标记的来决定一个对象是否是复合对象的一部分。

例子:

#fs/ext2/Makefile

obj-$(CONFIG_EXT2_FS) = ext2.o

ext2-y := balloc.o bitmap.o

ext2-$(CONFIG_EXT2_FS_XATTR) = xattr.o

在这个例子中,只有当$(CONFIG_EXT2_FS_XATTR)等于’y’,xattr.o才是是复合对象ext2.o的一部分。

注意:当然,在你将一个对象编译进内核的情况下,上面的语法也是有效的。所以,如果你将CONFIG_EXT2_FS=y,那么kbuild将会像你所期望的一样,生成一个ext2.o文件并且连接到built-in.o文件中去。

--- 3.4 导出符号的对象

在makefiles中,模块不需要任何特殊的表示就可以导出符号。

--- 3.5库文件目标 - lib-y

使用obj-*为前缀列出的对象是指定目录中将要编译生成的模块或者编译进built-in.o的目标。但是也有一些列出的目标有可能会包含到库文件lib.a中去。

以lib-y开头列出的对象将会被包含到对应目录下的一个单独的库文件中。

在obj-y列表中的对象以及附加在lib-y列表中的对象将不会被包含到库文件中,因为它们可以以任何方式读取。

为了保持一致性,lib-m列表中的对象将被包含进lib.a。

需要注意的是同一个kbuildmakefile 可能会列出编译进内核的文件以及包含进库中的文件。因此同一个目录可能会包含一个built-in.o和一个lib.a文件。

例子:

#arch/i386/lib/Makefile

lib-y := checksum.o delay.o

这个例子将会基于checksum.o和delay.o生成一个库文件lib.a。只有将目录置于列

表libs-y中,kbuild才会知道该目录下有一个lib.a要生成。

其它详情请看“6.3递归时列出需要访问的目录”。

一般只有lib/和arch/*/lib目录下可以使用lib-y

--- 3.6 进入子目录

一个Makefile文件只负责编译它所处目录的文件。子目录中的文件应该由子目录中的Makefile来进行维护。编译系统会自动递归进入子目录,从而提供一种让编译系统知道子目录存在的机制。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40628-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 林珝
      林珝

      那你们下场一定会很悲惨

    • 张晓
      张晓

      千千加油相信自己你最棒

    热点图片
    拼命载入中...