Linux下的Makefile笔记

 来源linux-2.6.20.21/Documentation/kbuild/makefiles.txt


obj-y += foo.o 表示编build-in,obj-m += foo.o表示编成module.
* kbuild 会编译所有的$(obj-y)文件,然后调用$(LD) -r把这些文件合并到一个built-in.o文件中。这个built-in.o稍后会被父级Makefile link到vmlinux
* 用lib-y := checksum.o delay.o 会把checksum.o和delay.o合编成一个lib.a
* obj-$(CONFIG_EXT2_FS) += ext2 /表示,当CONFIG_EXT2_FS=y的时候,要跑到ext2/目录下并make
* EXTRA_CFLAGS, EXTRA_AFLAGS, EXTRA_LDFLAGS, EXTRA_ARFLAGS
 EXTRA_CFLAGS 是在用CC编译C代码的时候加flag的,
 EXTRA_AFLAGS是在编译汇编语言的时候加flag用的,
 EXTRA_LDFLAGS是在LD的时候加flag用的,
 EXTRA_ARFLAGS是在AR的时候加flag用的
* CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF表示只在编译aha152x.o的时候加 -DAHA152X_STAT -DAUTOCONF
* AFLAGS_head-armv.o := -DTEXTADDR=$(TEXTADDR) -traditional和上面差不多,表示在编译特定汇编文件时加flag
* $(src) 是Makefile所在目录的相对路径
* $(obj )是目标文件保存在的目录的相对路径
* cflags-y += $(call cc-option ,-march=pentium-mmx,-march=i586)表示,如果$(CC)支持的话,-march=pentium- mmx会加给cflags-y,不支持的话就加-march=i586。还有一些as-option,ld-option,等等,基本原理都一样
* 要编在本地机上直接可以跑的程序用hostprogs,例如hostprogs-y := bin2hex表示把当前目录下的bin2hex.c编译成一个可执行文件(Host Program)
* 在一个可执行文件中link其他目标文件的办法:
#scripts/lxdialog/Makefile
        hostprogs-y   := lxdialog
        lxdialog-objs := checklist.o lxdialog.o
表示checklist.c和lxdialog.c都会被编译且会在后面合并成lxdialog这个可执行文件
* 还有其他讲host program的,略过
* make clean 会自己设别一些文件并清除。手工指定清除的办法
        clean-files := devlist.h classlist.h表示指定删除这两个文件
        clean-dirs := $(objtree)/debian/表示删除这个目录及子目录
        subdir- := compressed/表示告诉机器compressed/是子目录,要跑到里面试图清空
* kbuild的执行顺序
1) Configuration of the kernel => produce .config
2) Store kernel version in include/linux/version.h
3) Symlink include/asm to include/asm-$(ARCH)
4) Updating all other prerequisites to the target prepare:
   - Additional prerequisites are specified in arch/$(ARCH)/Makefile
5) Recursively descend down in all directories listed in
   init-* core* drivers-* net-* libs-* and build all targets.
   - The values of the above variables are expanded in arch/$(ARCH)/Makefile.
6) All object files are then linked and the resulting file vmlinux is
   located at the root of the obj tree.
   The very first objects linked are listed in head-y, assigned by
   arch/$(ARCH)/Makefile.
7) Finally, the architecture specific part does any required post processing
   and builds the final bootimage.
   - This includes building boot records
   - Preparing initrd images and thelike
* archprepare : maketools中的archprepare是一个关键字,表示在开始递归子目录编译之前要作的准备工作
* all : bzImage中的all是一个关键字,表示在make没有参数的时候该执行什么
* 有用的命令工具if_changed ,用来判断文件需不需要更新。例子:
target: source(s) FORCE
            $(call if_changed,ld/objcopy/gzip)
* := 表示立即赋值,= 表示把等号右边的东西先存起来,不运算,要用到左边变量时再运算



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值