Makefile中的-C和M=解析

转自:https://www.aliyun.com/jiaocheng/144874.html

  • 摘要:在进行嵌入式开发过程中,经常需要编写和运行Makefile,且在大型项目开发过程中,一般也都是使用Makefile来进行管理、编译、运行的,所以对Makefile的读写是嵌入式软件工程师必须具备的基本能力。Makefile中,特别是在内核模块编译过程中最常使用到的两个参数就是“-C”和“M=”。常用Makefile:#Makefileifneq($(KERNELRELEASE),)#kbuildsyntax.dependencyrelationshsipoffilesandt
  • 在进行嵌入式开发过程中,经常需要编写和运行Makefile,且在大型项目开发过程中,一般也都是使用Makefile来进行管理、编译、运行的,所以对Makefile的读写是嵌入式软件工程师必须具备的基本能力。 
    Makefile中,特别是在内核模块编译过程中最常使用到的两个参数就是“-C”和“M=”。常用Makefile: 
    # Makefile 
    ifneq ($(KERNELRELEASE),) 


    #kbuild syntax. dependency relationshsip of files and target modules are listed here.


    mymodule-objs := helloworld.o 


    obj-m := 
    helloworld.o


    else 


    PWD:= $(shell pwd)

     


    KERNEL_VER ?= $(shell uname -r)


    KERNEL_DIR := /lib/modules/$(KERNEL_VER)/build 
    all: 


    $(MAKE) -C $(KERNEL_DIR) M=$(PWD)


    clean: 


    rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions*.order *symvers


    endifKERNELRELEASE 是在内核源码的顶层Makefile中定义的一个变量,在第一次读取执行此Makefile时,KERNELRELEASE没有被定义,所以make将读取执行else之后的内容。 
    当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 
    表明然后返回到当前目录继续读入、执行当前的Makefile。 
    当从内核源码目录返回时,KERNELRELEASE已被被定义,kbuild也被启动去解析kbuild语法的语句,make将继续读取else之前的内容,其为kbuild语法的语句, 指明模块源码中各文件的依赖关系,以及要生成的目标模块名。Makefile编译运行结果: 

    aliyunzixun@xxx.com:~/fly/tmp$ make

     

    make -C /lib/modules/3.16.0-30-generic/build M=/home/shawn/fly/tmp

     

    make[1]: 正在进入目录 `/usr/src/linux-headers-3.16.0-30-generic'

     

    LD /home/shawn/fly/tmp/built-in.o

     

    CC [M] /home/shawn/fly/tmp/helloworld.o

     

    Building modules, stage 2.

     

    MODPOST 1 modules

     

    CC /home/shawn/fly/tmp/helloworld.mod.o

     

    LD [M] /home/shawn/fly/tmp/helloworld.ko

     

    make[1]:正在离开目录 `/usr/src/linux-headers-3.16.0-30-generic'

     

    aliyunzixun@xxx.com:~/fly/tmp$

  • 以上是Makefile中的-C和M=解析的内容,更多 Makefile 解析 的内容,请您使用右上方搜索功能获取相关信息。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值