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

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

cmd_<command> - 执行的命令名

例子:

#

quiet_cmd_image= BUILD $@

cmd_image = $(obj)/tools/build$(BUILDFLAGS) \

$(obj)/vmlinux.bin > $@

targets= bzImage

$(obj)/bzImage:$(obj)/vmlinux.bin $(obj)/tools/build FORCE

$(callif_changed,image)

@echo'Kernel: $@ is ready'

当更新 $(obj)/bzImage的时候,这一行

BUILD arch/i386/boot/bzImage

将会显示为 "makeKBUILD_VERBOSE=0"。

--- 6.8 预处理链接脚本

当生成vmlinux映像的时候,会使用连接器脚本arch/$(ARCH)/kernel/vmlinux。

这个脚本是vmlinux.lds.S文件的一个预处理变种,vmlinux.lds.S文件与这个脚本在同一 个目录下。makefile 语法

Kbuild知道.lds文件,并且包含一条*lds.S-> *lds规则。

例子:

#arch/i386/kernel/Makefile

always:= vmlinux.lds

#Makefile

exportCPPFLAGS_vmlinux.lds = -P -C -U$(ARCH)

赋给$(always)变量的等式是用来告诉kbuild建立vmlinux.lds目标。

赋给$(CPPFLAGS_vmlinux.lds)变量的等式是用来告诉kbuild在建立vmlinux.lds目标的时 候使用指定的选项。

当建立*.lds目标的时候,kbuild使用下面的这些变量:

KBUILD_CPPFLAGS : 在顶层Makefile文件中设置

cppflags-y : 可能在kbuild makefile文件中设置

CPPFLAGS_$(@F) : 针对特定的标志.

注意在这个赋表达式中使用文件全名。

针对*lds文件的kbuild机制在一些体系相关的文件中使用。

=== 7 Kbuild 变量

顶层Makefile导出了下列的一些变量:

VERSION,PATCHLEVEL, SUBLEVEL, EXTRERSIO

这些变量定义了当前内核的版本。很少有架构的Makefiles直接使用这些变量; 它们应该使用$(KERNELRELEASE)变量。

$(VERSION),$(PATCHLEVEL), and $(SUBLEVEL) 定义了版本号基本的三个部分,比如 "2","4", 和 "0"。这三个部分只能是数字。

$(EXTRERSION)定义了一个更小的版本子级别,它一般用于还不是正式的补丁以 及额外的补丁。它经常是一个非数字的字符串,比如"-pre4",并且它大多数情况下 是空的。

KERNELRELEASE

$(KERNELRELEASE)是一个单个的字符串,比如"2.4.0-pre4",它适合作为安装目录名 或者在版本号中出现。一些架构的Makefiles就基于这些目的使用了它。

ARCH

这个变量在目标夹头中定义,比如”i386”,”arm”,或者”sparc”。一些kbuild makefiles 通过检查$(ARCH)变量来决定编译哪些文件。


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

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

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