zoukankan      html  css  js  c++  java
  • 精简的makefile示例分析

    1 make

      make 是Linux自带的构建器,构建的规则在makefile文件中

    2 makefile文件名

      makefile 或 Makefile

    3 makefile中的规则

    • makefile的规则有三部分:目标,依赖,命令;
    • makefile有一条或多条规则组成;
    • 第一个目标是makefile的终极目标;
    • 用 # 添加注释。

    -------------------------------------------------------------------------

      目标:依赖
      (tab缩进) 命令

         gcc a.c b.c c.c -o app 改为makefile文件如下:

          

     4 makefile的编写

        工作原理:依赖不存在,就向下搜索下面的规则,如果找到用来生成查找依赖的规则,就执行规则中的命令;依赖存在,就判断是否需要更新

        第一版:改为多条规则如下,可以实现只有修改的文件才重新编译。

                

         第二版:使用自定义变量,减少冗余

                

        a.自定义变量:

          obj=a.o b.o c.o

          obj=10

         b.变量的取值:

          aa=$(obj)

        c. makefile自带的变量:大写

          CPPFLAGS

          CC

        d. 自动变量:只能在命令中使用

          $@  :  规则中的目标

          $<  :  规则中的第一个依赖

          $^  :  规则中的所有依赖

        e. 模式匹配:

          %.o:%.c

      第三版:全部改为自定变量。

              

      第四版:使用函数,实现makefile文件在不同的项目中通用。makefile所有的函数都有返回值

         

         a.  查找指定目录下指定类型的文件

            src=$(wildcard ./*.c)

         b. 匹配替换

            obj=$(patsubst %.c, %.o, $(src))

      第五版:添加清理项目功能。只需要添加一个新的规则:clean即可,注意:clean应该名声为伪目标。

         

        a. 使用.PHONY声明伪目标,如果clean不声明为伪目标,并且目录下有一个文件名为clean的文件,那么make clean就永远不会执行。

        b. rm命令前面添加一个 - 号,表示命令执行失败时,继续向下执行。

    src=$(wildcard ./*.c)
    obj=$(patsubst %.c, %.o, $(src))
    target=app
    
    $(target):$(obj)
            gcc $^ -o $@
    %.o:%.c
            gcc -c $< -o $@
    
    .PHONY:clean
    clean:
            -rm $(obj) $(target) -f
  • 相关阅读:
    MySQL改变表的存储引擎
    数字三角形合集
    POJ 3250 Bad Hair Day 单调栈
    Linux 网卡驱动学习(二)(网络驱动接口小结)
    Lecture Notes: Macros
    [转]LNMP环境下的Web常见问题排查(精品)
    ssh-copy-id password
    python
    python
    Ceph
  • 原文地址:https://www.cnblogs.com/ziwuxian/p/12588040.html
Copyright © 2011-2022 走看看