一、编译标志
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
网友评论