• Makefile学习笔记


    1,什么是makefile?

      makefile是一个文件。这个文件用来做什么的?答:文件里面的内容,指明了工程编译的规则。比如:哪些文件先编译,哪些后编译,哪些需要更新,如何编译,链接到哪些库等等。

    2,makefile的好处?

      如上所述,它能实现自动化编译,只需输入make命令,就能得到想要的执行文件。会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。

    3,makefile的规则: 

      target ... : prerequisites ...

      command

      target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。

      prerequisites就是,要生成那个target所需要的文件或是目标。

      command也就是make需要执行的命令。(任意的Shell命令)

      这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。

    4,多说无益,先来个例:

     

      ##Makefile
      # If KERNELRELEASE is defined, we've been invoked from the
      # kernel build system and can use its language.
      ifneq ($(KERNELRELEASE),)
         obj-m := hello.o

     

      # Otherwise we were called directly from the command
      # line; invoke the kernel build system
      else
         KERNEL_DIR ?= /lib/modules/`uname -r`/build
         MODULEDIR := $(shell pwd)

     

      default:
         make -C $(KERNEL_DIR) M=$(MODULEDIR) modules

     

      endif

     

      clean:
         rm -f *.o *.ko *.mod.c Module.* modules.*

     

    分析:

      http://blog.csdn.net/isnipe/article/details/3933941  

      补充:

      KERNEL_DIR表示内核源码目录,目录中包含了内核驱动模块所需要的各种头文件及依赖。

      -C表示 指定进入指定的目录即KERNEL_DIR,是内核源代码目录,调用该目录顶层下的Makefile,目标为modules。

      M=$(shell pwd)选项让该Makefile在构造modules目标之前返回到模块源代码目录并在当前目录生成obj-m指定的xxx.o目标模块。

      疑问:obj-m := hello.o不是在ifneq里么?到底哪定义了hello.o?  makefile里有很多隐藏规则,这个难道是它里面隐藏的????

    5,:= ,=,?=的区别
      :=不递归赋值
      =  递归赋值
      ?=默认值
      “:=” 的意思是,它右边赋得值如果是变量,只能使用在这条语句之前定义好的,而不能使用本条语句之后定义的变量;
      于此对应的是“=”,当它的右边赋值是变量时,这个变量的定义在本条语句之前或之后都可以;
      而“?=”是指,该符号左边的变量,如果在本条语句之前没有定义过,则执行本语句,如果已经定义,那么本语句什么都不做。

    6,写得有点乱了,不知道该怎么写下去了,其中一些规则或变量什么的,蛮繁杂的。边看边记录吧。

    7,第一次博客,失败。

    活着,就要自立自强~fighting~
  • 相关阅读:
    表达式树
    二叉查找树
    二叉树的先中后序遍历
    利用树的先序和后序遍历打印 os 中的目录树
    栈应用(中缀表达式转后缀表达式并计算后缀表达式的值)
    C语言的运算符的优先级与结合性+ASCII表
    算法运行时间中的对数
    c++ primer 第三章 标准库类型
    C++ premier 中文版 学习笔记(第五章 表达式)
    使用applescript脚本方式以管理员权限运行
  • 原文地址:https://www.cnblogs.com/cyc2009/p/3954249.html
Copyright © 2020-2023  润新知