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

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

例子:

#arch/i386/kernel/Makefile

extra-y:= head.o init_task.o

在这个例子中,extra-y用来列出将要被建立的目标文件,但是这些文件不应该被链接 作为built-in.o的一部分。

--- 6.6 用来建立启动映像的命令

Kbuild提供了一些宏用来帮助建立启动映像。makefile 语法

if_changed

if_changed是下面命令行的基础。

Usage:

target:source(s) FORCE

$(callif_changed,ld/objcopy/gzip)

当一个规则被求的时候,会检查规则相对于上次被调用是否有文件被更新或者命令行 被改变。如果任何可执行文件的选项被改变,那么就会强制执行rebuild。

如果任何目标使用了if_changed,那么它必须放进$(targets)列表中,不然命令行的检查 会失败,并且目标会一直被建立。

$(targets)的等式中没有使用 $(obj)/前缀。

if_changed可以结合和6.7节"Customkbuild commands"中定义的用户命令。

注意:一个典型的错误就是忘记了 FORCE 先决条件。

另外一个常见的陷阱就是空有时很显著;比如,下面的例子将会失败(注意逗号后面 的多余空):

target:source(s) FORCE

#WRONG!# $(call if_changed, ld/objcopy/gzip)

ld

链接目标。LDFLAGS_$@经常用来指定ld的选项。

objcopy

复制二进制。OCOPYFLAGS的使用经常在arch/$(ARCH)/Makefile文件中指定。

OCOPYFLAGS_$@可以用来设置附加的选项。

Gzip

压缩目标。使用最大的压缩限度来压缩目标。

例子:

#arch/i386/boot/Makefile

LDFLAGS_bootsect:= -Ttext 0x0 -s --oformat binary

LDFLAGS_setup := -Ttext 0x0 -s --oformat binary -ebegtext

targets= setup setup.o bootsect bootsect.o

$(obj)/setup$(obj)/bootsect: %: %.o FORCE

$(callif_changed,ld)

在这个例子中,有两个可能的目标,在它们在链接的时候需要不同的选项。通过使用 LDFLAGS_$@语法式来指定链接选项 -每一个可能的目标都需要指定。

$(targets)代表的是所有可能的目标,kbuild通过$(targets)来知道这些目标,然后执行 下面的操作:

1)检查命令行的改变

2)执行make clean时删除目标

先决条件中的":%: %.o" 部分是一个简写方式,它可以让我们不用列出setup.o和 bootsect.o文件。

注意:一个常见的错误就是忘记"target :="赋表达式,导致目标文件在没有明显原因 的情况下被重新编译。

--- 6.7 自定义kbuild命令

当kbuild运行时KBUILD_VERBOSE=0,那么只正常显示一个命令的简写方式。

为了使能自定义命令这一行为,kbuild需要设置两个变量:

quiet_cmd_<command> -被显示的部分


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

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

    • 王梦娇
      王梦娇

      猛禽配凡凡

    • 周宣王
      周宣王

      #吴亦凡##挑战者吴亦凡#虽然不能去

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