Linux Kernel Makefiles编译标志

一、编译标志

ccflags-y、asflags-y和ldflags-y的值分别对应编译、汇编和链接,这三个标志仅适用于分配它们的kbuild Makefile文件。

以前使用EXTRA_CFLAGS, EXTRA_AFLAGS 和 EXTRA_LDFLAGS标志实现相同的行为。目前仍然支持这些标志,但其用法已被弃用。

subdir-ccflags-y和subdir-asflags-y类似于ccflags-y和asflags-y,区别:subdir-变量对本目录和所有子目录都有效。

CFLAGS_$@和AFLAGS_$@仅适用于当前kbuild makefile中的命令,为某个编译单独提供参数。例:

CFLAGS_setup.o = -DUTS_MACHINE='"$(UTS_MACHINE)"'
AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET)

二、特殊规则

定义特殊规则时,会使用两个变量:

1、$(src):指向当前Makefile所在目录的相对路径,引用位于src树中的文件时,使用$(src)

2、$(obj):指向保存目标的目录的相对路径,引用生成的文件时,使用$(obj)

例:

## arch/arm64/boot/Makefile
## srctree表示当前代码所在目录的路径
## src表示当前Makefile所在目录的路径,即arch/arm64/boot/
install:
        $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \    
        $(obj)/Image System.map "$(INSTALL_PATH)"

参考:

Documentation/kbuild/makefiles.txt

{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/4702401/blog/5132830